我应该将一个字节数组(我想是字符串的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]
但是我想提取每个字节的十六进制值,然后将它们加入。有没有简单的方法可以做到这一点?还是我处理方法不正确!
答案 0 :(得分:1)
给出一个二进制字符串:
s = "\xA6\x9E\x00\x14\x00\x8E\x00{\"site_name\":115854}\xF5"
您可以将unpack1
与H*
一起使用(十六进制字符串,高位优先):
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