【发布时间】:2015-12-17 02:48:54
【问题描述】:
所以,我正在用 C 语言编写一个 ye olde SHA1 算法的实现(我知道它不安全,它是针对 Matasano 问题的),并且对于某些变量来说,它们的长度正好是 32 位非常重要。读到 unsigned long int 按标准是 32 位后,我就使用了它,然后花了 4 个小时试图找出为什么我的哈希值都错了,直到我想看看 sizeof(unsigned long int) 是什么结果。剧透,它是 64。
现在我当然在使用uint32_t,并且将来会一直使用,但是有人(最好是比我更谨慎、更容易轻信的人)请指出实际 为现代 C 编写了可变大小的标准?或者告诉我为什么这个问题被误导了,如果是的话?
【问题讨论】:
-
实际 位置将成为标准,它和所有受人尊敬的教程和参考资料都说尺寸取决于平台。这就是添加
[u]intxx_t类型的原因。 -
标准规定 long int 将与 int 一样大或更大,并且非常努力避免过于具体。标准是寻找您寻求的答案的错误位置。
-
在我在这里找到的标准的第 27 页上:open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf,它说:
unsigned long int类型的对象的最大值:2**32 - 1。这对我来说似乎很具体,所以我仍然不确定该相信什么...... -
好的,在上面的一页上,它说“它们的实现定义的值的幅度(绝对值)应等于或大于所示的值”,因此解释了这一点。感谢大家的帮助。