string - 在lua中将字符串转换为十六进制?

标签 string sockets lua hex bytearray

我打算通过套接字发送一个字节数组,但是我以前在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/

相关文章:

reference - 如何将对表的引用添加到 userdata 对象?

c++ - 如何使用 Lua 从表中的表中获取值?

java - 最佳实践/性能 : mixing StringBuilder. 附加 String.concat

r - 如何在R中的字符中查找字符串

ios - 将参数传递给选择器操作

java - 在 C++ 和 Java 之间传输数据最快的方法是什么

java - 在本地机器上调用特定网页时触发 Java 代码

string - 为什么不能将字符串键存储在关联数组中?

php - Mysql:每个socket地址的用法

xml - 在 Lua 中查找第一个匹配模式的字符串(XML 模式匹配)