Ruby массив символов в байтовый массив (из шестнадцатеричных символов) для передачи по Bluetooth - PullRequest
0 голосов
/ 23 апреля 2019

Я должен был передать байтовый массив (я предполагаю c терминологию для строки?) В API, используемый для связи Bluetooth.Я пытаюсь передать этот массив, объединенный в строку:

["\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 ]

1 голос
/ 23 апреля 2019

С учетом двоичной строки:

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

Вы можете использовать unpack1 с H* (шестнадцатеричная строка, сначала большой клев):

s.unpack1('H*') #=> "a69e0014008e007b22736974655f6e616d65223a3131353835347df5"
0 голосов
/ 23 апреля 2019

Я думаю, этого будет достаточно. Я до сих пор не ясно, являются ли байтовый массив и строка "эквивалентными" в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...