我无法从通过以太网接收的原始数据转换为16位int值。
例如,我可能会收到以下信息:\ x00 \ x0A \ x00 \ x00 \ x00 \ x09 \ x01 \ x10 \ x00 \ x01 \ x00 \ x10 \ x02 \ x00 \ x00
我需要获取这些原始数据字节中的两个,并将它们转换为16位无符号值。到目前为止,我已经尝试过使用tonumber(),但是我找不到找到一种方法来组合两个字节,在这里我看到了一些使用string.gsub()进行转换的示例,但是这些都可以处理原始数据的ASCII表示形式。
TIA
string.byte()
将其转换为数值,然后将更高的有效位乘以256(或者,如果您使用的是Lua 5.3或更高版本,则将其左移8位),然后将它们相加。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