Lua中将两个8位值转换为16位无符号整数及相反

我在将通过以太网接收到的原始数据转换为16位整数值时遇到了问题。

例如,我可能会收到这样的值: \x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00

我需要将这些原始数据字节中的两个转换为一个16位无符号值。我已经尝试使用 tonumber(),但我找不到一种将两个字节组合在一起的方法。我已经在这里看到了使用 string.gsub() 进行转换的示例,但这些示例都涉及原始数据的 ASCII 表示。

TIA

点赞
用户7509065
用户7509065

使用 string.byte() 函数获取单个字符的数值,并且将高位乘以 256(如果是 Lua 5.3 或更新的版本则左移 8 位),然后相加即可。

2020-04-29 21:35:49
用户107090
用户107090

如果您使用的是 Lua 5.3 或更新版本,还可以尝试使用 string.unpack 函数。您可以使用 <> 选择字节序:

s="\x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00\x00"
print("<",">")
for i=1,#s,2 do
    print((string.unpack("<i2",s,i)),(string.unpack(">i2",s,i)))
end
2020-04-29 23:18:58