将 Little Endian 转换为 Big Endian – 未获得预期结果
我有一个非常小的代码,我试图将 16 位数字从小端格式转换为大端格式。
number 的值是 0x8000,转换后我希望它是 0x0080 - 但我得到了一些不同的值,如下所述:
#include <iostream>
int main()
{
int num = 0x8000;
int swap = (num>>8) | (num<<8);
std::cout << swap << std::endl;
return 0;
}
程序输出 8388736 作为值,十六进制为 0x800080 - 我不确定我做错了什么?
回答
如果你这样做,0x8000 << 8你会得到0x800000。如果你|和0x80你一起得到答案,你现在得到。您需要过滤掉上部:
int swap = (num>>8) | (0xFF00 & (num<<8));
建议:使用固定宽度的类型,如uint8_t,uint16_t,uint32_t和uint64_t。
- 不,一般方法是使用 `htons()` 和 `ntohs()` 函数
THE END
二维码