如何在C++中進行大端和小端值的轉換?


在這裡,我們將學習如何在C++中將小端值轉換為大端值,或者將大端值轉換為小端值。在進行實際討論之前,我們將瞭解什麼是大端和小端。

在不同的架構中,多位元組資料可以以兩種不同的方式儲存。有時高位位元組優先儲存,在這種情況下稱為大端,有時低位位元組優先儲存,則稱為小端。

例如,如果數字是0x9876543210,那麼大端將是:

小端將是這樣的:

在本節中,我們將學習如何將小端轉換為大端,反之亦然。為此,我們必須交換第1個和第4個位元組,以及第2個和第3個位元組。我們可以使用邏輯表示式來交換它們。建立四份數字副本,然後對於第一個副本,將第一個位元組右移24位;對於第二個副本,將其與00FF0000進行掩碼,然後右移8位;對於第三個副本,將其與0000FF00進行掩碼,然後左移8位;對於最後一個副本,將元素左移24位。然後邏輯或這四個副本以獲得反轉的結果。

示例

#include <iostream>
#define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24)) using namespace std;
void memory_represent(char *value, int n) {
   int i;
   for (i = 0; i < n; i++)
      printf(" %.2x", value[i]);
}
int main() {
   unsigned int x = 0x9876543210;
   int y;
   cout << "The little endian value is: ";
   memory_represent((char*)&x, sizeof(x));
   cout << endl;
   y = SWAP_INT32(x);
   cout << "The Big endian value after conversion is: ";
   memory_represent((char*)&y, sizeof(y));
   cout << endl;
}

輸出

The little endian value is: 10 32 54 76
The Big endian value after conversion is: 76 54 32 10

更新於:2019年7月30日

6K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告