【发布时间】:2015-02-23 22:00:47
【问题描述】:
何时使用 size_t 与 uint32_t?我在一个项目中看到了一个方法,它接收一个名为length(类型为uint32_t)的参数来表示要处理的字节数据的长度,该方法用于计算接收到的字节数据的CRC。参数的类型后来被重构为 size_t。在这种情况下使用 size_t 是否有技术优势?
例如
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(uint32_t)length;
- (uint16_t)calculateCRC16FromBytes:(unsigned char *)bytes length:(size_t)length;
【问题讨论】:
-
AFAICS,没有有意义的理由这样做。给定的 CRC 被定义为在特定的字长下工作,而这正是
uint32_t的含义。从语义的角度来看,size_t不对应于明确的大小。 -
我猜这是因为您希望
size_t成为平台可以原生支持的最大数据类型(即,您希望在保持快速的同时拥有较大的范围)。例如。在 32 位系统上,您希望它是 32 位,而在 64 位系统上,您希望它是 64 位,但您不希望size_t是 32 位上的 64 位类型系统(或 16 位系统上的uint32_t)。否则,它可能只是一个很好的指标,表明该参数表示某种尺寸数量。我不知道他们为什么特别选择在这里使用size_t。 -
谢谢大家 - 我在问题中添加了更多细节。
-
@tangrs 所以根据你的理由,使用 size_t 比 NSUInteger 更好吗?它们在技术上是否相同?
-
好的,加上上下文,这更有意义。
size_t没有用于 CRC 数学本身,它只是循环绑定。这是完全合理的。
标签: objective-c c size-t uint32