Порядок бит в C/С++

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

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

Пример:

unsigned char b = 1;

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

Ответ 1

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

Ответ 2

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