嘿,我完全超出了我的深度,我的大脑开始受伤。.:(

我需要隐藏一个整数,以便它适合3字节数组。(是24位整数吗?),然后再次返回以通过套接字从字节流中发送/接收此数字。

我有:

NSMutableData* data = [NSMutableData data];

 int msg = 125;

 const void *bytes[3];

 bytes[0] = msg;
 bytes[1] = msg >> 8;
 bytes[2] = msg >> 16;

 [data appendBytes:bytes length:3];

 NSLog(@"rtn: %d", [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] intValue]);

 //log brings back 0

我想我的主要问题是我不知道如何检查我是否确实正确转换了我的int,这是我发送数据也需要做的转换。

任何帮助,不胜感激!

最佳答案

您可以使用联合:

union convert {
    int i;
    unsigned char c[3];
};

从int转换为字节:
union convert cvt;
cvt.i = ...
// now you can use cvt.c[0], cvt.c[1] & cvt.c[2]

从字节转换为整数:
union convert cvt;
cvt.i = 0; // to clear the high byte
cvt.c[0] = ...
cvt.c[1] = ...
cvt.c[2] = ...
// now you can use cvt.i

注意:以这种方式使用并集依赖于处理器字节顺序。我给出的示例将在小端系统(如x86)上工作。

09-25 17:54