如何在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
廣告