作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我正在尝试使用 NSSwap 交换 32 位无符号整数的字节 我原来的 NSInteger 是 13a81fbe 我希望它变成:be1fa813 运行后 NSInteger swappedIntege
我是一名优秀的程序员,十分优秀!