Упорядочение битов / декодирование Flac Endianness - PullRequest
0 голосов
/ 15 октября 2019

В настоящее время я пытаюсь написать транскодер FLAC в WAV в качестве упражнения на C ++, и в настоящее время я немного ломаю формулировку формата FLAC относительно порядка следования битов.

Вот (немного)раздел, посвященный порядку:

Все числа, используемые в битовом потоке FLAC, являются целыми числами;нет никаких представлений с плавающей точкой. Все числа имеют порядковый номер. Все числа не подписаны, если не указано иное.

Применимо ли это к порядку битов, а также к порядку байтов? Более конкретно, если я читаю, скажем, 7-битное значение, получу ли я самый старший бит 1-й?

1 Ответ

0 голосов
/ 15 октября 2019

Порядок следования битов никогда не должен быть проблемой, если вы не используете struct с битовыми полями (что является хорошей причиной, чтобы избежать этого).

Кроме того, вы можете читать данные только по одному байту за раз. Если вы хотите прочитать 7 бит из байта, вам нужно применить битовую маску к значению байта.

Например, если байт содержит одно значение в старшем бите и другое в младшем 7биты, вы должны извлечь их следующим образом:

field1 = (byte & 0x80) >> 7;
field2 = byte & 0x7f;
...