首页 > 解决方案 > 用于蓝牙传输的 Ruby 字符数组到字节数组(十六进制字符)

问题描述

我应该将一个字节数组(我猜是字符串的 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]

但我想提取每个字节的十六进制值,然后 .join 它们。有没有一种简单的方法可以实现这一目标?还是我错误地接近这个!

标签: crubybluetooth

解决方案


给定一个二进制字符串:

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

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

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

推荐阅读