В C у меня есть массив символов, который я использую для хранения данных на уровне бит. Я храню эти массивы в файлах, а затем читаю их на машинах с разными архитектурами. Мой вопрос заключается в том, что порядок бит будет гарантированно согласован? Например, если я сохраняю «10010011» в первый байт, будут ли считанные смежные 1 всегда находиться в позициях 2^0 и 2^1, или они могут быть интерпретированы как 2^7 и 2^6 бит ?bit endianness и переносимость двоичных файлов C
EDIT: Я хочу немного разъяснить этот вопрос для людей, которые читают эту страницу позже. Байт-сущность - это порядок байтов в многобайтовом объекте, но я беспокоюсь о битах в заданном байте. Когда байт хранится на диске, он сохраняется как последовательность (обычно) 8 бит. Я не эксперт в области аппаратного обеспечения, но это должно как-то сводиться к этому. Итак, моя забота заключается в том, что способ, которым хранится байт, таков, что любая машина будет считывать исходное значение unsigned char, или если то, что от 3 до одной машины, будет 192 к другой. Я обеспокоен тем, что бит в конечном итоге будет перетасован. По-видимому, это не проблема, в соответствии с ответом, который я выбрал, а также одним из комментариев ниже. Благодарю.
Я искренне надеюсь, что вы знаете, что C даже не пытается гарантировать размер байта, кроме как сказать, что он должен быть не менее 8 бит, как уступка архитектуре, которая не нравится 8-битным байтам что много ... – Deduplicator
Спасибо за предупреждение, я полагаюсь на гарантию не менее 8 бит, поэтому бит более высокого порядка, если они есть, не должен вызывать никаких проблем. – Jack
Если вы ограничиваете себя архитектурой с 8-битовым символом (все современные, за немногими исключениями, которые используют более высокую мощность-2), вы в порядке, если ограничиваете свой запрос чтением и записью 'unsigned char' и вручную (de-) сериализует все более сложное из них. Больше гарантий упростит и ускорит работу, хотя ... – Deduplicator