Arrays 向R2000 RFID读卡器发送Hex命令

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

在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,如何执行反向操作


提前感谢

这是一种简单的二进制格式
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]