【问题标题】:How to convert endianness- as array of bits如何将字节顺序转换为位数组
【发布时间】:2012-06-09 01:58:51
【问题描述】:

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

【问题讨论】:

  • 不会std::reverse 工作,还是我错过了一些巨大的东西?
  • @chris:字节序决定了最重要的 byte 是什么。
  • @chris:我认为这只会颠倒整个序列和字节序……交换一些字节或什么?
  • @tskuzzy,废话,我的脑子因为六月已经麻木了>.>
  • @DeadMG,std::rotate 怎么样?你可以移动一组位。

标签: c++ endianness


【解决方案1】:

我不是一个真正的 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;
    }
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2019-12-13
      • 2011-02-02
      • 2023-04-06
      • 2011-02-28
      相关资源
      最近更新 更多