Стандартные размеры байтов для переменных в C?
Итак, я писал о реализации старого алгоритма SHA1 в C (я знаю, что он небезопасен, он предназначен для задач Матасано), и для некоторых переменных очень важно, чтобы они имели длину 32 бита. Прочитав это unsigned long int
32 бита по стандарту, я просто использовал это, а затем потратил 4 часа, пытаясь выяснить, почему, черт возьми, мои хэши выходили совершенно неправильно, пока я не подумал посмотреть sizeof(unsigned long int)
вышел, чтобы быть. Спойлер, это было 64.
Сейчас конечно пользуюсь uint32_t
и так будет всегда в будущем, но может ли кто-то (предпочтительно тот, кто обладает большей осмотрительностью и меньшей доверчивостью, чем я) указать мне, где записаны фактические стандарты для переменных величин для современного C? Или скажите, почему этот вопрос ошибочен, если это так?
1 ответ
Минимальные размеры:
char
- 8 битshort
- 16 битint
- 16 битlong
- 32-разрядныйlong long
- 64-разрядный
Максимальных размеров не существует, автор компилятора выбирает все, что, по его мнению, будет работать лучше для целевой платформы. Соответствующие типы без знака имеют одинаковый минимальный размер.