bytearray:set_size(5) 在Lua Wireshark中失败

在基于 Lua 的解析器中,我想将一个 tvb 内容转换为另一个 tvb。代码如下:

local strbuf = buffer(offset, strlen * 2) -- 从 tvb 范围
offset = offset + strlen * 2

local inbytes = strbuf:bytes()
local outbytes = ByteArray.new()
outbytes:set_size(strlen) -- 失败;使用数字代替 strlen 也会失败

失败消息是“expected userdata, got number”。为什么 set_size 会期望 userdata?或者,如何分配给定大小的 ByteArray?

原文链接 https://stackoverflow.com/questions/7607466

点赞
stackoverflow用户180258
stackoverflow用户180258

以下代码可以运行,但不够优雅:

local s = ""
for i = 0, strlen-1 do
    s = s .. "ff"
end
local outbytes = ByteArray.new(s)
2011-09-30 07:55:15
stackoverflow用户312586
stackoverflow用户312586

似乎您在他们的实现中发现了一个错误。根据他们自己的 API,创建一个空的 ByteArray 不与使用 set_size 不兼容。

我找不到这个问题的问题追踪器,但您可以尝试将您发现的错误发送到他们的邮件列表:https://www.wireshark.org/mailman/listinfo/wireshark-dev

作为一个解决方法,您是否尝试使用一个空字符串来初始化 ByteArray?

local outbytes = ByteArray.new("") -- 注意这里是一个空字符串
outbytes:set_size(strlen)
2011-09-30 11:41:12