Рубиновый эквивалент для массива Python - PullRequest
0 голосов
/ 18 июля 2011

Мне нужен рубиновый эквивалент для следующего кода Python

import array
my_array = array.array('B', [0x00, 0x04, 0xcc, 0x50]).tostring()

ОБНОВЛЕНИЕ: Я пытаюсь записать 4 байта в последовательный порт, используя гем ruby-serialport.

Мне удалось заставить его работать в python, записав указанный байтовый массив в последовательный порт. Сейчас я пытаюсь сделать то же самое в рубине.

Ответы [ 3 ]

6 голосов
/ 18 июля 2011

Вы ищете Array#pack?

byte_string = [0x00, 0x04, 0xCC, 0x50].pack('C*')

Из тонкой инструкции :

arr.pack ( aTemplateString ) → aBinaryString
Упакует содержимое arr в двоичную последовательность в соответствии с директивами в aTemplateString .

Шаблон C предназначен для 8-разрядных целых чисел без знака(т. е. одиночные байты), а * просто означает «использовать предыдущий шаблон для остальных элементов в массиве».

1 голос
/ 18 июля 2011

Похоже, вы хотите получить следующую строку: \x00\x04\xccP.Вы можете просто написать "\x00\x04\xcc\x50"

1 голос
/ 18 июля 2011

Вы можете поместить байты, которые даны в шестнадцатеричном формате, прямо в вашу строку. Приведенная ниже часть действительна как для Python, так и для Ruby.

"\x00\x04\xcc\x50"
...