我试图反转十六进制值。但结果是错误的。
#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
。
我的代码出了什么问题?
答案 0 :(得分:2)
从技术上讲,没有。但是你为什么要使用htons
?它将16位数据的endianess更改为big-endian(即网络字节顺序)。首先是你的变量不是16位而是32位,所以uint16_t acc = 0xBBD1
会更合适。其次,作为你在小端机器上,字节被交换,因此输出。
答案 1 :(得分:0)
htons()
反转x86机器上的字节顺序。所以你的结果是正确的,只需交换字节。看一下字节序。