Мы все любим портативные программы C/С++.
Мы знаем, что sizeof(char)
или sizeof(unsigned char)
всегда 1
"байт". Но этот 1
"байт" не означает байт с 8 битами. Это просто означает "машинный байт", а количество бит в нем может отличаться от машины к машине. См. этот вопрос.
Предположим, вы выписали букву ASCII 'A' в файл foo.txt
. На любой нормальной машине в эти дни, которая имеет 8-разрядный машинный байт, эти биты будут записаны:
01000001
Но если бы вы запускали тот же код на машине с 9-битным машинным байтом, я предполагаю, что эти биты будут записаны:
001000001
Более того, последняя машина могла записать эти 9 бит как один машинный байт:
100000000
Но если бы мы прочитали эти данные на прежней машине, мы бы не смогли это сделать должным образом, так как места недостаточно. Так или иначе, мы должны сначала прочитать один машинный байт (8 бит), а затем каким-то образом преобразовать окончательный 1 бит в 8 бит (машинный байт).
Как программисты могут правильно согласовать эти вещи?
Я прошу, что у меня есть программа, которая пишет и читает файлы, и я хочу убедиться, что она не сломается через 5, 10, 50 лет.