如何在 C 中反转整数?

How to inverse an integer in C?

我正在尝试反转十六进制值。然而,结果是错误的。

#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

我的代码有什么问题?

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

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