【发布时间】:2018-04-08 03:40:01
【问题描述】:
似乎uint32_t 比uint_fast32_t 更普遍(我知道这是轶事证据)。不过,这对我来说似乎违反直觉。
几乎总是当我看到一个使用uint32_t 的实现时,它真正想要的只是一个可以容纳高达 4,294,967,295 值的整数(通常是在 65,535 和 4,294,967,295 之间的一个低得多的范围)。
然后使用uint32_t 似乎很奇怪,因为不需要'正好 32 位' 保证,而 '最快可用 >= 32 位' 保证uint_fast32_t 似乎是完全正确的想法。而且,
虽然它通常已实现,但实际上并不能保证 uint32_t 存在。
那么,为什么会首选uint32_t?它只是更广为人知还是有技术优势?
【问题讨论】:
-
简单的答案,也许他们需要一个正好是 32 位的整数?
-
首先我听说
uint32_fast_t,如果我理解正确的话,它是至少 32位(意味着它可能更多?听起来误导我) .我目前在我的项目中使用uint32_t和朋友,因为我正在打包这些数据并通过网络发送它,我希望发送者和接收者确切地知道这些字段有多大。听起来这可能不是最强大的解决方案,因为平台可能无法实现uint32_t,但我的所有人显然都这样做了,所以我对我正在做的事情很好。 -
@yano:对于网络,你还应该关心字节顺序/字节序——
uint32_t不会给你这个(遗憾的是没有uint32_t_be和uint32_t_le,这将更适合uint32_t目前是最佳选择的几乎所有可能的情况)。 -
@Brendan - 关于 _be 和 _le,htonl() 和 ntohl() 会提供相同的功能吗?
-
@Brendan 这是一个非常重量级的对象,可以隐藏在标准 int 中,所有这些都是原始类型。我原则上同意你的观点,这应该在某个地方的标准中处理,但我认为这可能不是这个地方