如何在C中反转整数?

时间:2015-08-23 13:35:34

标签: c hex inverse

我试图反转十六进制值。但结果是错误的。

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>

int main(void)
{
    uint32_t acc = 0xBBD1;

    printf("0x%X", htons(~acc));    // prints 0x2E44 
}

让我们手动进行反演:

0xBBD1 = 1011 1011 1101 0001
~1011 1011 1101 0001 =
 0100 0100 0010 1110
0100 0100 0010 1110 = 0x442E

这意味着,代码实际上应该打印0x442E而不是0x2E44

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

从技术上讲,没有。但是你为什么要使用htons?它将16位数据的endianess更改为big-endian(即网络字节顺序)。首先是你的变量不是16位而是32位,所以uint16_t acc = 0xBBD1会更合适。其次,作为你在小端机器上,字节被交换,因此输出。

答案 1 :(得分:0)

htons()反转x86机器上的字节顺序。所以你的结果是正确的,只需交换字节。看一下字节序。