lua中将字节序列转换为ASCII字符串

我正在尝试编写Wireshark的自定义解析器,它将将字节/十六进制输出更改为ASCII字符串。

我已经成功编写了这个解析器的主体,并且它运行良好。 我唯一的问题是将此数据转换为ASCII字符串。

Wireshark将此数据声明为字节序列。 对于Lua,数据类型为“userdata”(使用“type(data)”测试)。 如果我仅使用“tostring(data)”将其转换为字符串,则我的解析器返回“24:50:48”,这是数组中字节的确切十六进制表示形式。

是否有任何方法可以直接将此字节序列转换为ascii,或者您可以帮助我将此冒号分隔字符串转换为ascii字符串吗? 我对Lua完全陌生。 我尝试了类似于' split(tostring(data),“:”)'但是这会返回'Lua Error:attempt to call global'split'(值为nil)


使用Jakuje的答案,我能够创建类似于以下内容的东西:

function isempty(s)
  return s == nil or s ==''
end
data =“24:50:48:49:4A”
s =“”
对于string.gmatch(data,“[^:] *”)中的每个i,如果不是isempty(i)则
     print(string.char(tonumber(i,16)))
     s = s .. string.char(tonumber(I,16))
end
print(s)

我不确定这是否有效,但至少它起作用;)

点赞
用户2196426
用户2196426

Lua 中没有 split 函数(查阅参考手册是一个好的开始)。你应该使用 string.gmatch 函数,如维基所述:

data = "24:50:48"
for i in string.gmatch(data, "[^:]*") do
  print(i)
end

实例

此外,你还需要搜索 string.char 函数,将字节转换为ASCII字符。

2016-04-29 11:54:34
用户936986
用户936986

您需要标记您感兴趣的缓冲区字节范围并将其转换为所需的类型:

data:range(offset, length):string()
-- 或者只要调用它,由于 __call 元方法的缘故,它的效果是一样的
data(offset, length):string()

完整的将缓冲区范围数据转换为不同类型的可用方法列表请参见 https://wiki.wireshark.org/LuaAPI/Tvb 中的 TvbRange 描述。

2016-04-29 12:00:24