我正在实现 WireShark 解析器,我有一个技术问题(我仍在学习 lua 解析器的细节)。
特别是,我想将 int/float/string 项添加到基于可变长度数组的剖析子树(长度取决于从首选项加载的文件)。
我想避免创建与数组中的项目一样多的 ProtoField(我不知道长度),我剖析的数组具有一致的项目类型,它们要么都是 int,要么都是 float,或者都是 string。
我在堆栈溢出中没有看到如何实现这一目标的问题。
假设协议侦听器模式,您可以简单地添加以获得子树,然后在循环中添加值,例如:
function DecoderListener:setParameter(widgetID, paramID, value)
if (type(value) == "table") then
local array_tree = self.subtree:add(paramID)
if #value >= 1 then
for i, value0 in ipairs(value) do
self:setArrayParameter(array_tree, value0, i)
end
end
end
end
function DecoderListener:setArrayParameter(array_tree, value, index)
local real_value = value:getValue()
-- this can handle int/float/string real values
array_tree:add(real_value)
end
这将导致 Wireshark 中的元素折叠为您指定的所有值。