Ruby将字符数组转换为(十六进制字符的)字节数组以进行蓝牙传输

时间:2019-04-23 08:01:43

标签: c ruby bluetooth

我应该将一个字节数组(我想是字符串的C术语?)传递给用于蓝牙通信的api。我要传递的是作为字符串连接的此数组:

["\xA6", "\x9E", "\x00", "\x14", "\x00", "\x8E", "\x00", "{", "\"", "s", "i", "t", "e", "_", "n", "a", "m", "e", "\"", ":", "1", "1", "5", "8", "5", "4", "}", "\xF5"]

但是,此操作无提示失败,预期格式为:

a69e0014008e007b22736974655f6e616d65223a3131353835347df5

我可以看到Ruby有一个字符串方法bytes.to_a可以给我

[166, 158, 0, 20, 0, 142, 0, 123, 34, 115, 105, 116, 101, 95, 110, 97, 109, 101, 34, 58, 49, 49, 53, 56, 53, 52, 125, 245]

但是我想提取每个字节的十六进制值,然后将它们加入。有没有简单的方法可以做到这一点?还是我处理方法不正确!

2 个答案:

答案 0 :(得分:1)

给出一个二进制字符串:

s = "\xA6\x9E\x00\x14\x00\x8E\x00{\"site_name\":115854}\xF5"

您可以将unpack1H*一起使用(十六进制字符串,高位优先):

s.unpack1('H*') #=> "a69e0014008e007b22736974655f6e616d65223a3131353835347df5"

答案 1 :(得分:0)

我想这足够了。我尚不清楚字节数组和字符串在ruby中是否“等效”

intarr=["\xA6", "\x9E", "\x00", "\x14", "\x00", "\x8E", "\x00", "{", "\"", "s", "i", "t", "e", "_", "n", "a", "m", "e", "\"", ":", "1", "1", "5", "8", "5", "4", "}", "\xF5"].join.bytes.to_a
strres=""
intarr.each do |x|
  strres=strres+x.to_s(16)
end
puts strres