我有一個非常小的代碼,我試圖將一個16位的數字從little endian轉換成big endian格式。
數字的值是0x8000,轉換后我希望它是0x0080 - 但我得到了一些不同的值,如下所述:
#include <iostream>
int main()
{
int num = 0x8000;
int swap = (num>>8) | (num<<8)。
std::cout << swap << std::endl;
return 0;
該程式輸出8388736的值,在十六進制中是0x800080 - 我不確定我做錯了什么?
uj5u.com熱心網友回復:
如果你做0x8000 << 8,你會得到0x800000。如果你用|,得到0x80,你會得到現在的答案。你需要過濾掉上面的部分:
int swap = (num>> 8) | (0xFF00 & (num<<8) )。)
建議。使用固定寬度的型別,像uint8_t、uint16_t、uint32_t和uint64_t。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/314157.html
標籤:
上一篇:為什么ctor中的std::initializer_list的行為與預期不符?
下一篇:自我的靜態參考類
