有没有标准的C函数用于bitwapping?

时间:2011-11-08 22:52:37

标签: c linux bit-manipulation

  

可能重复:
  Best Algorithm for Bit Reversal ( from MSB->LSB to LSB->MSB) in C

我有一个64位字,我想对它进行以下操作。

首先,我想进行位交换(与位0交换位63)                                将位62与位1交换,依此类推)

完成上述操作后,我想在字节0和字节7之间进行字节交换交换                                                                             字节1和字节6等等。

现在我们在gcc linux中有一个内置函数来做第二部分bswap_64()。有没有函数可以做第一部分在gcc linux C中可用

1 个答案:

答案 0 :(得分:6)

净效果与每个字节的位交换相同。例如,字节0首先复制到字节7,其位反转,然后复制回byte0,没有位反转。

对于任何这些操作都没有内置支持,但是对每个字节进行位交换应该相当简单。最有效的方法可能是256个元素的查找表。

uint64_t the_word = /* whatever */
unsigned char *bytes = &the_word;
for (i = 0; i < 7; i ++) {
     bytes[i] = reverse[bytes[i]];
}

其中:

const unsigned char reverse[UCHAR_MAX+1] {
    0x00, 0x80, ..., 0xFF
}

您可以编写一个小程序来计算每个字节值的位交换值,并为bytes的初始化生成源代码。 (或者,既然你正在编写代码来进行计算,你可以在程序中使用它来代替查找表;它取决于速度的重要性。)

例如,这假定CHAR_BIT == 8,语言无法保证。

我没有测试过这个。

相关问题