C 中变量的标准字节大小?
Standard byte sizes for variables in C?
所以,我正在用 C 编写一个 ye olde SHA1 算法的实现(我知道它不安全,它是针对 Matasano 问题的),对于一些变量来说,它们恰好是 32 位长是非常重要的。读到 unsigned long int
是标准的 32 位后,我就用了它,然后花了 4 个小时试图找出为什么我的哈希值全错了,直到我想看看 sizeof(unsigned long int)
来了出是。剧透,原来是 64。
当然,我现在正在使用 uint32_t
,并且将来会一直使用,但是有人(最好是比我更谨慎、更不易受骗的人)可以指点我 actual 为现代 C 编写了可变大小的标准?或者告诉我为什么这个问题被误导了,如果是的话?
最小尺寸为:
char
- 8 位
short
- 16 位
int
- 16 位
long
- 32 位
long long
- 64 位
没有最大尺寸,编译器作者选择他们认为最适合目标平台的任何尺寸。相应的无符号类型具有相同的最小大小。
所以,我正在用 C 编写一个 ye olde SHA1 算法的实现(我知道它不安全,它是针对 Matasano 问题的),对于一些变量来说,它们恰好是 32 位长是非常重要的。读到 unsigned long int
是标准的 32 位后,我就用了它,然后花了 4 个小时试图找出为什么我的哈希值全错了,直到我想看看 sizeof(unsigned long int)
来了出是。剧透,原来是 64。
当然,我现在正在使用 uint32_t
,并且将来会一直使用,但是有人(最好是比我更谨慎、更不易受骗的人)可以指点我 actual 为现代 C 编写了可变大小的标准?或者告诉我为什么这个问题被误导了,如果是的话?
最小尺寸为:
char
- 8 位short
- 16 位int
- 16 位long
- 32 位long long
- 64 位
没有最大尺寸,编译器作者选择他们认为最适合目标平台的任何尺寸。相应的无符号类型具有相同的最小大小。