如何在Objective-C中将int转换为byte?

4

我有一个int值,需要将其转换为字节数组。 在Objective-C中如何实现这个功能?是否有相应的方法可以使用?

谢谢。


可能是重复问题:Stackoverflow - Store an int in a char array?。至少可以让你得到char[] - user166390
2个回答

6
以什么方式转换?您想要小端、大端还是本机字节顺序?如果想要本机字节顺序,那么您只需要做以下操作:
int val = //... 以某种方式初始化整数
char* bytes = (char*) &val
int len = sizeof(int);
话虽如此,操作整数的最佳方式是进行位运算。例如,要获取最低位字节,可以使用 val&0xFF,获取下一个字节可以使用 (val>>8)&0xFF,然后是 (val>>16)&0xFF(val>>24)&0xFF等。
当然,这取决于您的数据类型的大小。如果您执行这些操作,您应该包含 <inttypes.h>;,并使用 uint8_tuint16_tuint32_tuint64_t,具体取决于您需要多大的整数;否则,您无法可靠地操作更多字节的数字。

假设您知道它是整数,那么您是否可以使用循环并使用8的倍数来可靠地操作其字节,使用sizeof()确定的长度? - Joel Fischer

1
我猜想您想要做的是将这个字节数组传递到可能是 NSMutableData 对象的某处。您只需传递地址 &val。
例如:
[myData appendBytes:&myInteger length:sizeof(myInteger)]; 

这个链接更完整,涉及字节序:

将NSInteger附加到NSMutableData


1
对于 int 类型的数据,例如 21,在字节数组或 NSData 中将返回 {15, 00, 00, 00}。 但有时我希望以相反的顺序得到它,即以十六进制形式为 <00 00 00 15> 或者在数组中表示为 int (21) = {00, 00, 00, 15}。在这种情况下,这种方法就不适用了。 - karim
@karim 你找到解决方案了吗? - Kaaaaai
@Kaaaaai 不是的,至少那个时候我已经有一段时间没有用 Objective-C 了。 - karim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接