Битовый порядок в C / C ++ - PullRequest
       23

Битовый порядок в C / C ++

10 голосов
/ 29 сентября 2011

Я должен реализовать протокол, который определяет данные в 8-битных словах, который начинается с младшего разряда (LSB) первым.Я хочу реализовать эти данные с помощью unsigned char, но я не знаю, каков порядок битов младшего и старшего разрядов (MSB) в C / C ++, что может потребовать замены битов.

Можеткто-нибудь объяснит мне, как узнать, что unsigned char закодировано: с MSB-LSB или LSB-MSB?

Пример:

unsigned char b = 1;

MSB-LSB: 0000 0001 LSB-MSB: 1000 0000

Ответы [ 2 ]

11 голосов
/ 29 сентября 2011

Endian-ness зависит от платформы.В любом случае вам не нужно беспокоиться о действительном порядке bit , если только вы не сериализуете байты, что вы, возможно, пытаетесь сделать.В этом случае вам по-прежнему не нужно беспокоиться о том, как хранятся отдельные байты, пока они находятся на компьютере, так как вам все равно придется копать биты по отдельности.К счастью, если вы поразрядно И с 1, вы получите LSB, независимо от порядка хранения;бит-И с 2, и вы получите следующий наиболее значимый бит, и так далее.Компилятор определит, какие константы нужно сгенерировать в машинном коде, так что уровень детализации будет удален.

5 голосов
/ 29 сентября 2011

В C / C ++ такого нет.Наименее значимый бит - ну - наименее значимый бит.Поскольку биты не имеют адресов, другого порядка нет.

...