我有一个非常小的代码,我试图将 16 位数字从小端格式转换为大端格式。
number 的值是 0x8000,转换后我希望它是 0x0080 - 但我得到了一些不同的值,如下所述:
#include <iostream>
int main()
{
int num = 0x8000;
int swap = (num>>8) | (num<<8);
std::cout << swap << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出 8388736 作为值,十六进制为 0x800080 - 我不确定我做错了什么?
如果你这样做,0x8000 << 8你会得到0x800000。如果你|和0x80你一起得到答案,你现在得到。您需要过滤掉上部:
int swap = (num>>8) | (0xFF00 & (num<<8));
Run Code Online (Sandbox Code Playgroud)
建议:使用固定宽度的类型,如uint8_t,uint16_t,uint32_t和uint64_t。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |