我想为Wireshark编写自定义解析器,它将字节/十六进制输出更改为ASCII字符串。在lua中将字节序列转换为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' (a nil value)
使用Jakuje的答案,我能创造这样的事情:
function isempty(s)
return s == nil or s == ''
end
data = "24:50:48:49:4A"
s = ""
for i in string.gmatch(data, "[^:]*") do
if not isempty(i) then
print(string.char(tonumber(i,16)))
s = s .. string.char(tonumber(i,16))
end
end
print(s)
我不知道这是否是有效的,但至少它作品;)
我看到有人用同样的方式分割,所以我也试过了。后来我发现,在Lua中没有分裂:(我会尽力去找你的方式,首先我必须跳过string.gmatch。 –
它的空白条目,谢谢;) –
任何downvote的原因,勇敢的游侠? – Jakuje