Порядок бит в 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/С++ такой вещи нет. Наименее значимый бит - это - наименьший значащий бит. Поскольку биты не имеют адресов, других заказов нет.