1

我想创建一个简单的应用程序来交换 2 字节和 4 字节十六进制代码的字节。

所以它应该这样做:从 1234 到 3421 交换。我谷歌发现我必须使用 byteorder 和 CFSwapInt32 和 CFSwapInt16。

这是我已经得到的:

NSString *byteOrder = [NSString stringWithFormat:@"%d",CFSwapInt32(12345678)];
    NSLog(byteOrder);

但我得到的不是正确的交换字节:1315027968 作为 NSLog 的编号。

有人可以帮助我或告诉我我做错了什么吗?:) 我只想交换字节,所以它们的顺序相反

1234 -->3412
12 34 -->34 12

12345678 -->78563412
12 34 56 78 --> 78 56 34 12

谢谢

4

2 回答 2

1

尝试

NSString *byteOrder = [NSString stringWithFormat:@"%x",CFSwapInt32(0x12345678)];

%x将输出一个值作为十六进制。

以 开头的数字0x会将其解释为十六进制值。

于 2012-08-09T13:16:15.220 回答
0

您的原始号码是 12345678,十六进制是 0x00BC614E

您在日志中得到的输出是 1315027968,在十六进制中是 0x4E61BC00

所以一切正常。

如果您愿意,可以尝试在十六进制中执行相同的操作:

NSString *byteOrder = [NSString stringWithFormat:@"%x",CFSwapInt32(0x00BC614E)];
NSLog(byteOrder);

应该记录 0x4E61BC00 而

NSString *byteOrder = [NSString stringWithFormat:@"%x",CFSwapInt32(0x12345678)];
NSLog(byteOrder);

应该记录 0x78563412

于 2012-08-09T13:26:43.430 回答