我在 objective-c(特别是在 iOS 上)中使用哪个有区别吗?我认为它来自 C 及其类型的继承,以及 iOS 所基于的 Mac OS 的类型的继承,但我不知道应该使用哪一个:
unsigned char
来自……好吧……编译器?
uint8_t
来自 stdint.h
UInt8
来自 MacTypes.h
字节
来自 MacTypes.h
Bytef
来自 zconf.h
我知道各种 defs 是出于可移植性的原因,并且使用像 unsigned char
这样的文字并不是 future 的好想法(大小可能会改变,事情最终会再次像 Windows API)。我想要一些关于如何发现最适合我使用的建议。或者,如果我只是在犯傻,那就好好教训一顿吧……
编辑:只是为了获得更多信息,如果我想要一些总是是 1 字节的东西,我应该使用 uint8_t(它似乎不会随着这样的名字)?我认为 UInt8 也不会改变,但我发现 UInt32 的定义因处理器是否为 64 位而异。
进一步编辑:当我说字节时,我特指我想要 8 位。我正在为磁盘存储做像素压缩操作(32 位 -> 8 位)。
最佳答案
完全无所谓。无论你使用哪个,它很可能最终会成为 unsigned char
。 .不过,如果你想让它看起来不错,我建议你使用 uint8_t
来自 <stdint.h>
.
两者都不会随着架构而改变。 char
根据 C 标准,它始终是 1 个字节,如果在实现中,UInt8 突然变成 16 位长,从用户的角度来看,这将是无法支持的。
(然而,char
并非需要 8 位宽,只是如果类型的名称表明它的长度为 8 位,那么任何合理的实现都确实将其类型定义为这样. 顺便说一下,一个字节(char
是)通常是一个 8 位单元,即一个八位字节。)
关于ios - 定义一个字节的方式有很多种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946012/