将 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_tuint16_tuint32_tuint64_t

  • 不,一般方法是使用 `htons()` 和 `ntohs()` 函数

以上是将 Little Endian 转换为 Big Endian – 未获得预期结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>