繁体   English   中英

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

[英]Conversion of sequence of bytes to ASCII string in lua

我正在尝试为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' (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中没有split这样的功能(咨询参考手册是一个好的开始)。 你应该使用wiki上描述的string.gmatch函数:

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

实例

此外,您正在搜索string.char函数以将字节转换为ascii char。

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

data:range(offset, length):string()
-- or just call it, which works the same thanks to __call metamethod
data(offset, length):string()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM