在lua中将两个8位值转换为16位无符号整数并返回

在lua中将两个8位值转换为16位无符号整数并返回,lua,type-conversion,Lua,Type Conversion,从以太网接收的原始数据转换为16位int值时遇到问题 例如,我可能会收到以下信息: \x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00 我需要取两个原始数据字节,并将它们转换为16位无符号值。 到目前为止,我已经尝试过使用tonumber(),但是我找不到一种方法使其组合2个字节,我在这里看到了一些使用string.gsub()进行转换的示例,但是这些都处理原始数据的ASCII表示 TIA对单个字符使用string.byte(

从以太网接收的原始数据转换为16位int值时遇到问题

例如,我可能会收到以下信息: \x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00

我需要取两个原始数据字节,并将它们转换为16位无符号值。 到目前为止,我已经尝试过使用tonumber(),但是我找不到一种方法使其组合2个字节,我在这里看到了一些使用string.gsub()进行转换的示例,但是这些都处理原始数据的ASCII表示


TIA

对单个字符使用
string.byte()
将其转换为数值,然后将更重要的一个乘以256(或者如果使用Lua 5.3或更高版本,将其左移8位),然后添加它们。

对单个字符使用
string.byte()
将其转换为数值,然后将更高的有效值乘以256(或者如果您使用的是Lua5.3或更新版本,请将其左移8位),然后将其相加。

如果您使用的是Lua5.3或更新版本,请尝试
字符串。解包
。您可以使用
选择字节顺序:

s=“\x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00\x00”
打印(“”)
对于i=1,#s,2 do
打印((string.unpack(“i2”,s,i)))
结束

如果您使用的是Lua5.3或更高版本,请尝试
string.unpack
。您可以使用
选择字节顺序:

s=“\x00\x0A\x00\x00\x00\x09\x01\x10\x00\x01\x00\x10\x02\x00\x00\x00”
打印(“”)
对于i=1,#s,2 do
打印((string.unpack(“i2”,s,i)))
结束

谢谢你的回答,我最终选择了@Joseph发布的解决方案,因为它看起来更简单。谢谢你的回答,我最终选择了@Joseph发布的解决方案,因为它看起来更简单。谢谢你的回答,现在我已经看到了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