ios - 定义一个字节的方式有很多种

标签 ios objective-c byte typedef

我在 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/

相关文章:

iphone - 使用启动画面而不是加载画面——是否违反了 Apple 的 HIG?

iphone - HitTest 以避免 subview 但希望另一个 subview 工作

iphone - 在 iphone uiautomation 中验证文本颜色

c - 为什么要添加填充,如果 char 在 int 之后?

ios - 如何在iOS中获得没有Internet和GPS(可能是运营商)的用户所在国家

ios - sqlite中的约束问题

Android - 将字节数组写入 OutputStreamWriter

java - 如何从 Java 中的无符号字节中获取 float ?

ios - 如何防止单元格在另一个单元格中镜像按钮按下操作?

ios - 如何在标签栏中设置角标(Badge)值?