如何将字节序转换为位数组

时间:2012-06-05 02:14:39

标签: c++ endianness

我希望将值从little-endian转换为big-endian(反之亦然)。我将值表示为位数组,而不是单个整数。如何实现字节顺序交换功能?

2 个答案:

答案 0 :(得分:2)

我不是一个真正的C ++人员,所以我只是打算这样做。

从big endian转换为little endian是为了反转字节。也就是说,一个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;
    }
}

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

答案 1 :(得分:1)

你可以查看这个优秀的article,其中解释了如何交换和处理不同字节序的数据。 也许函数集endian.h可能对你有所帮助。