LUA通过TCP套接字发送十六进制变量

埃利亚

也许这很容易,但是我是LUA初学者...
我正在创建一个非常简单的QSC QSYS插件,以使用KVL API控制投影服务器。服务器API基于HEX字符串。
例如,以下命令要求服务器使用9bf5455689ed4c019731c6dd3c071f0e uuid加载播放列表:

Controls["LoadSPL"].EventHandler = function()
    sock:Write(
        "\x06\x0e\x2b\x34\x02\x05\x01\x0a\x0e\x10\x01\x01\x01\x03\x09\x00\x83\x00\x00\x14\x00\x00\x00\x01\x9b\xf5\x45\x56\x89\xed\x4c\x01\x97\x31\xc6\xdd\x3c\x07\x1f\x0e"
    )
end

现在,我需要能够根据用户界面中文本框(或从服务器读取的可用UUID列表)中指示的文本,创建一个具有可变UUID的字符串。我将把这个字符串连接到命令的固定部分。我怎样才能正确地使字符串ad17fc696b49454db17d593db3e553e5成为成为\xad\x17\xfc\x69\x6b\x49\x45\x4d\xb1\x7d\x59\x3d\xb3\xe5\x53\xe5谢谢!

茉莉花

尝试这个:

local input = "ad17fc696b49454db17d593db3e553e5"
local output = input:gsub("%w%w", function(s) return string.char(tonumber(s, 16)) end)

说明:这将获取每对字符,将它们解释为以16为底的数字字符串,然后接受具有该数字的字符,并使用该数字替换原始字符。


编辑:为了弄清楚到底发生了什么,以及为什么其他答案是错误的,反斜杠转义序列\xad如是Lua源代码的功能,在内存中由带有value的字节表示173,就像A由带有value的字节表示一样65尝试将文字反斜杠字符与十六进制字符连接起来不会创建转义代码。因此,方法是使用手动进行string.char

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章