如何在 Objective-C 中将 int 转换为字节?
Posted
技术标签:
【中文标题】如何在 Objective-C 中将 int 转换为字节?【英文标题】:How do you convert an int to a byte in Objective-C? 【发布时间】:2011-02-10 22:07:26 【问题描述】:我有一个需要转换为字节数组的 int 值。 你如何在 Objective-C 中做到这一点?有没有办法做到这一点?
谢谢,
【问题讨论】:
可能重复:*** - Store an int in a char array?。至少它可以让你到达char[]
。
【参考方案1】:
以什么方式转换?你想要它是小端、大端还是原生字节顺序?如果您希望它以本机字节顺序排列,那么您需要做的就是:
int val = //... 以某种方式初始化整数 char* 字节 = (char*) &val; int len = sizeof(int);也就是说,处理整数字节的最佳方法是进行按位运算。例如,要获取最低位字节,可以使用val&0xFF,获取下一个使用(val>>8)&0xFF
,然后是(val>>16)&0xFF
,然后是(val>>24)&0xFF
,等等。
当然,这取决于您的数据类型的大小。如果你做这些事情,你真的应该包括<
inttypes.h
>
;,并使用uint8_t
、uint16_t
、uint32_t
或uint64_t
,这取决于你想要多大的整数;否则,您将无法可靠地处理大量字节。
【讨论】:
假设你知道它是一个整数,你不能只使用一个循环并使用 8 的倍数来使用你从sizeof()
确定的长度可靠地处理它们的字节吗?【参考方案2】:
我怀疑您想要做的是将这个字节数组传递给某个地方可能的 NSMutableData 对象。你只需传递地址 &val
例子:
[myData appendBytes:&myInteger length:sizeof(myInteger)];
这个链接更完整,处理字节序:
Append NSInteger to NSMutableData
【讨论】:
对于 int 类型的数据,即 21,它将在字节数组或 NSData 或字节数组中返回 15 00 00 00。 15, 00, 00, 00。但有时我希望它以相反的顺序作为十六进制的 或 int (21) = 00, 00, 00, 15 的数组。在这种情况下,这种方法将不起作用。以上是关于如何在 Objective-C 中将 int 转换为字节?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中将字符串转换为整数? [复制]