Существует метод распаковки для построения представления двоичной строки в виде массива целых чисел, строк и т. Д. c, но я не могу найти способ разбить на произвольные биты (например, 11 b i ts.
Ruby распаковка двоичного файла решает проблему для строк произвольной длины в байтах, но не работает для битов.
Я хотел бы реализовать как-то так:
'binarydata'
.unpack('b11b11b11b11b11') # => ["01000110100", ... ]
.map { |b| b.to_i(2) } # => [564, 948, 628, 308, 372]
.pack('magic') # => 'binarydata'
Проблема в том, что он не читается и строит строки (которые не выглядят производительно). Кроме того, для распаковки необходимо знать размер (потому что 'b11*'
не является допустимой строкой шаблона.