我打算通过套接字发送一个字节数组,但是我以前在c/c++中工作并且是lua的新手。
现在我有一个问题,这是我的问题。
我想发送一个bytearray.It应该包含mac_address,string_length,string。
有关详细信息:
mac_address:6个字节
字符串长度:1个字节
字符串:几个字节
(1)第一个问题
现在,我有一个mac_address字符串,例如“01:2f:c2:5e:b6:a3”,如何将其转换为6字节的十六进制数组?
(2)秒
如何定义一个无符号数字并将其存储到字节?例如,sting_length为33,我如何将其作为0x21存储到一个字节中?
(3)最后
如何将mac_address(6bits),string_length(1bit),data_string(例如100bytes)组合成一个字节数组,并成功地通过luasocket发送出去。
就这样。
谢谢!
最佳答案
您可以使用string.char
来获取数字的符号表示形式,这将使您可以将数字打包成字节。这样的事情应该起作用:
local function packet(address, str)
return address:gsub("(%x+):?",function(s) return string.char(tonumber(s, 16)) end)
.. string.char(#str)
.. str
end
print(packet("10:2f:c2:5e:b6:a3", "abc") == "\16/\194^\182\163\3abc")
gsub
接受地址中的每个组,tonumber(s, 16)
将十六进制数字转换为十进制,string.char
将其转换为字符(一个字节)。然后将其全部打包成一个可以发送的字符串。这是结果字符串的Lua表示形式:"\16/\194^\182\163\3abc"
。
关于string - 在lua中将字符串转换为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419345/