Ответ 1
use limits.h
CHAR_BIT
http://www.cplusplus.com/reference/clibrary/climits/
также, если вы хотите использовать точно определенный размер, используйте stdint.h
Я знаю, что стандарты C/С++ гарантируют минимум 8 бит на char, и что теоретически 9/16/42/что-то еще возможно, и поэтому все сайты о написании переносного кода предупреждают о допуске 8bpc, Мой вопрос в том, как это "не переносится"?
Позвольте мне объяснить. Как я вижу, есть 3 категории систем:
char
не является точно 8 бит. (пожалуйста, поправьте меня, если я ошибаюсь)char
больше tham 8 бит, я не слышал об одном до настоящего времени (еще раз, пожалуйста, сообщите мне, если я просто не знаю).Нижняя строка: существуют ли общие (более% 0.001) платформы (в категориях 1 и 2 выше), где char
не 8 бит? И верно ли мое предположение?
use limits.h
CHAR_BIT
http://www.cplusplus.com/reference/clibrary/climits/
также, если вы хотите использовать точно определенный размер, используйте stdint.h
По крайней мере, как и целочисленный размер в 64-битных архитектурах, будущие платформы могут использовать более широкий char, с большим количеством бит. Символы ASCII могут стать устаревшими, замененными на unicode. Это может быть причиной, поэтому будьте осторожны.
Например, многие DSP имеют CHAR_BIT
больше или равно 16.
Обычно вы можете с уверенностью предположить, что файлы будут иметь 8-битные байты, а если нет, то 8-битные файлы могут быть преобразованы в нулевой дополнительный формат с помощью обычно используемого инструмента. Но гораздо опаснее предположить, что CHAR_BIT == 8. В настоящее время это почти всегда так, но в будущем это может быть не всегда. 8-битный доступ к памяти становится все более узким местом.