【发布时间】:2015-04-14 20:03:46
【问题描述】:
我正在尝试创建一个 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,将最右边的位向右移动并将其放入正确的键中。然后在函数的稍后部分,我将监控该位是否发生了更好或更坏的变化。
如果我在 Linux 的 Terminator 中运行类似的函数,并打印出对,我会得到以下返回:
49
24
12
6
3
1
0
0
56
28
14
7
3
1
0
0
这是我不明白如何获取每个值并将其设置为位的地方
我对此很陌生,所以我不怀疑有一种更简单的方法可以做到这一点。如果我需要进一步解释,我会尝试。
【问题讨论】:
标签: lua hex byte bit data-conversion