Arrays 向R2000 RFID读卡器发送Hex命令
在R2000 RFID读卡器模块的配置方面,我在过去几次中取得了进步。现在我有一个新问题。如果我想获得天线设置信息,我会发送一个Hex命令,模块会返回下一个信息: A5 5A 00 0A 2b 22 11 12 0D 0A 其中,数据22 11是DByte1 DByte0,表示选择了天线1、5、10和14。我不知道如何从22 11十六进制代码中获取此信息 DByte1(十六进制22)表示选择了天线10和14 DByte0(十六进制11)表示选择了天线1和5 在Ruby中,如何从十六进制11获取10,14个值,从十六进制22获取1,5个值? 如果将天线14设置为十六进制20,如何执行反向操作Arrays 向R2000 RFID读卡器发送Hex命令,arrays,ruby,byte,Arrays,Ruby,Byte,在R2000 RFID读卡器模块的配置方面,我在过去几次中取得了进步。现在我有一个新问题。如果我想获得天线设置信息,我会发送一个Hex命令,模块会返回下一个信息: A5 5A 00 0A 2b 22 11 12 0D 0A 其中,数据22 11是DByte1 DByte0,表示选择了天线1、5、10和14。我不知道如何从22 11十六进制代码中获取此信息 DByte1(十六进制22)表示选择了天线10和14 DByte0(十六进制11)表示选择了天线1和5 在Ruby中,如何从十六进制11获取1
提前感谢这是一种简单的二进制格式
0x2211
是一个16位整数,其中每个位表示一个天线:
format('%016b', 0x2211)
#=> "0010001000010001"
# ^ ^ ^ ^
# 14 10 5 1
因此,要确定是否设置了天线,只需检查相应位是否设置为1
:
n = 0x2211
n[0] == 1 #=> true
n[1] == 1 #=> false
n[2] == 1 #=> false
n[3] == 1 #=> false
n[4] == 1 #=> true
请注意,索引是基于0的,即n[0]
是天线1
在Ruby中,如何从十六进制11获取10,14个值,从十六进制22获取1,5个值
您可以提取二进制,将数字与其基于1的索引()相结合,这些位设置为1
,并通过以下方式提取其索引:
或使用位运算符和:
天线=[]
0.如果(0x2211&(1[1,5,10,14],则最多(15)个{i}天线推(i+1)
请参阅“”以及链接的页面和“”.我们需要知道您尝试过什么;您是否研究过这个问题?如果有,为什么没有帮助?如果有帮助,您是否编写了代码?如果没有,为什么?如果有,演示您遇到问题的最简单的代码示例是什么?目前,您似乎没有尝试编写代码,希望我们编写一个教程来描述您需要做的事情,这是非正式的奥皮克。
0x2211.digits(2) #=> [1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1]
.each.with_index(1) #=> [[1, 1], [0, 2], [0, 3], [0, 4], [1, 5], [0, 6], [0, 7], [0, 8], [0, 9], [1, 10], [0, 11], [0, 12], [0, 13], [1, 14]]
.select { |b, i| b == 1 } #=> [[1, 1], [1, 5], [1, 10], [1, 14]]
.map(&:last) #=> [1, 5, 10, 14]
antennas = []
0.upto(15) { |i| antennas.push(i + 1) if (0x2211 & (1 << i)) != 0 }
antennas #=> [1, 5, 10, 14]