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 位

没有最大尺寸,编译器作者选择他们认为最适合目标平台的任何尺寸。相应的无符号类型具有相同的最小大小。