gpt4 book ai didi

objective-c - NSSwap 返回有符号整数?

转载 作者:行者123 更新时间:2023-11-28 22:42:37 25 4
gpt4 key购买 nike

我正在尝试使用 NSSwap 交换 32 位无符号整数的字节

我原来的 NSInteger 是 13a81fbe 我希望它变成:be1fa813

运行后

NSInteger swappedInteger = NSSwapInt(unencodedInteger);

我得到一个新的整数,其字节值为:be1fa813。但是当我将它打印到控制台时,我得到 -1105221613

我的完整代码是这样的:

//get bytes within range
NSInteger unencodedInteger;
[mydata getBytes:&unencodedInteger range:myRange];

//swap the endianess of the bytes
NSInteger swappedInteger = NSSwapInt(unencodedInteger);

//debug logging
NSLog(@"Original: %x (%d) Swapped: %x (%d)",unencodedInteger, unencodedInteger,swappedInteger, swappedInteger);

//add swapped integer to array
[banks addObject:[NSNumber numberWithInteger:swappedInteger]];

有谁知道为什么新的交换值就像已签名一样?

最佳答案

二进制:

0xbe1fa813 = 0b10111110000111111010100000010011

现在大概您正在使用的架构 (iOS) 将有符号整数视为以 2 补码表示。即,当值为负时设置最高有效位。因此,这个被解释为带符号整数的数字是负数,因为它以 1 位开头。我刚刚在 OS X 上做了一个快速测试程序,确实 printf() 打印了一个很好的负整数和正整数,这取决于我提供的转换说明符:

#include <stdio.h>

int main(void)
{
printf("%x %u %d\n", 0xbe1fa813, (unsigned)0xbe1fa813, 0xbe1fa813);
return 0;
}

输出:

be1fa813 3189745683 -1105221613

我想说这一切都绝对是意料之中的。

关于objective-c - NSSwap 返回有符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com