如何在C中求整数的逆?

如何在C中求整数的逆?,c,hex,inverse,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 } 这意味着,代码实际上应该打印0x442E而不是0x2E44 我的代码怎么了?htons

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

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

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

    printf("0x%X", htons(~acc));    // prints 0x2E44 
}
这意味着,代码实际上应该打印0x442E而不是0x2E44


我的代码怎么了?

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

从技术上讲,没有。但为什么要使用HTON?它将16位数据的尾数更改为大尾数,即网络字节顺序。第一个变量不是16位而是32位,因此uint16\u t acc=0xBBD1更合适。第二,当您在一台小的endian机器上时,字节被交换,因此输出。

请查看位endian。@cad这是您所做的一次重要编辑。依我看,它丢失了OP的一些原始版本。@chux为什么会丢失?谢谢,直到现在我才知道endian,我修正了我的代码以考虑endian。