gpt4 book ai didi

Lua:十六进制字到二进制的转换

转载 作者:行者123 更新时间:2023-12-02 15:44:47 25 4
gpt4 key购买 nike

我正在尝试创建一个 Lua 程序来监视从设备的周期性状态 ping。从设备以 16 位十六进制字发送其状态,我需要将其转换为二进制字符串,因为每个位都与设备的属性相关。我可以接收输入字符串,并且我有一个包含每个参数 16 个键的表。但我很难理解如何将十六进制单词转换为 16 位字符串,以便我可以监控它。

这是我正在开始研究的基本功能。

function slave_Status(IP,Port,Name)
status = path:read(IP,Port)
sTable = {}
if status then
sTable.ready=bit32.rshift(status:byte(1), 0)
sTable.paused=bit32.rshift(status:byte(1), 1)
sTable.emergency=bit32.rshift(status:byte(1), 2)
sTable.started=bit32.rshift(status:byte(1), 3)
sTable.busy=bit32.rshift(status:byte(1), 4)
sTable.reserved1=bit32.rshift(status:byte(1), 5)
sTable.reserved2=bit32.rshift(status:byte(1), 6)
sTable.reserved3=bit32.rshift(status:byte(1), 7)
sTable.reserved4=bit32.rshift(status:byte(2), 0)
sTable.delay1=bit32.rshift(status:byte(2), 1)
sTable.delay2=bit32.rshift(status:byte(2), 2)
sTable.armoff=bit32.rshift(status:byte(2), 3)
sTable.shieldoff=bit32.rshift(status:byte(2), 4)
sTable.diskerror=bit32.rshift(status:byte(2), 5)
sTable.conoff=bit32.rshift(status:byte(2), 6)
sTable.envoff=bit32.rshift(status:byte(2), 7)
end
end

我希望这种方法是可以理解的?我想接收十六进制字符串,例如 0x18C2 并将其转换为 0001 1000 1100 0010,将最右边的位向右移动并将其放入正确的 key 。然后,在该函数的后面,我将监视该位是否变好或变坏。

如果我在 Linux 的 Terminator 中运行类似的函数,并打印出这些对,我会得到以下返回:

49
24
12
6
3
1
0
0
56
28
14
7
3
1
0
0

这是我不明白如何获取每个值并将其设置为位的地方

我对此很陌生,所以我毫不怀疑有更简单的方法可以做到这一点。如果我需要进一步解释,我会尝试。

最佳答案

tonumber(s, 16) 将十六进制表示形式转换为十进制,string.char 将返回数字的符号/字节表示形式。检查这个recent SO answer有关如何使用它们的示例;答案中的解决方案可能适合您。

关于Lua:十六进制字到二进制的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com