0

我正在寻找将值从小端转换为大端(反之亦然)。我将值表示为位数组,而不是单个整数。如何实现字节顺序交换功能?

4

2 回答 2

2

我不是一个真正的 C++ 人,所以我只是一般地这样做。

从大端转换为小端就是反转字节。即一个8位的段。

因此,如果您有一个N字节数组(此处为伪编码):

bool bits[8*N];

你会做这样的事情:

for(int i = 0; i < N/2; i++) {
    for(int j = 0; j < 8; j++) {
        bool tmp = bits[8*i+j];
        bits[8*i+j] = bits[8*(N-i-1)+j];
        bits[8*(N-i-1)+j] = tmp;
    }
}

在评论中,您提到“位”实际上是指向表达式的指针,这些表达式稍后会被评估为正确的位。以这种方式更改指针的顺序将在您稍后获得位时产生正确的字节序变化。

于 2012-06-05T02:32:46.563 回答
1

您可以查看这篇优秀的文章,其中解释了如何交换和处理不同字节序的数据。此外,endian.h函数集可能对您有所帮助。

于 2012-09-24T10:24:07.140 回答