【问题标题】:How do you convert an int to a byte in Objective-C?如何在 Objective-C 中将 int 转换为字节?
【发布时间】:2011-02-10 22:07:26
【问题描述】:

我有一个需要转换为字节数组的 int 值。 你如何在 Objective-C 中做到这一点?有没有办法做到这一点?

谢谢,

【问题讨论】:

标签: objective-c bytearray int


【解决方案1】:

以什么方式转换?你想要它是小端、大端还是原生字节顺序?如果您希望它以本机字节顺序排列,那么您需要做的就是:

int val = //... 以某种方式初始化整数 char* 字节 = (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() 确定的长度可靠地处理它们的字节吗?
【解决方案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} 的数组。在这种情况下,这种方法将不起作用。
猜你喜欢
  • 2011-02-12
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多