Распаковка 3-байтовых / 24-битных блоков данных с помощью Ruby - PullRequest
1 голос
/ 25 января 2010

Я создаю библиотеку WAV для чтения / записи на чистом Ruby, изучая более глубокие функциональные возможности Ruby. В настоящее время он хорошо работает с 16-битным звуком, так как я могу использовать String.unpack('s*') для извлечения отдельных сэмплов в массив целых чисел со знаком. Однако у меня возникают проблемы, когда я думаю о том, как работать с 24-битным звуком. Каждый образец в этом случае имеет длину 3 байта. Какую строку pack / unpack вы бы порекомендовали в этом случае, и мне, вероятно, пришлось бы радикально изменить мой подход (используя заполнение или что-то в этом роде)?

1 Ответ

2 голосов
/ 25 января 2010

Поскольку вы использовали unpack("s+"), я предполагаю, что ваш образец находится в порядке с прямым порядком байтов. Вот не очень быстрое, но работоспособное решение.

>> "ABCDEF".scan(/.../).map {|s| (s.reverse + 0.chr ).unpack("V")}.flatten
=> [4276803, 4474182]    #=> [0x414243, 0x444546] in HEX
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...