如何在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+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告