净效果与每个字节的位交换相同.例如,首先将字节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
语言无法保证.
我没有测试过这个.
净效果与每个字节的位交换相同.例如,首先将字节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
语言无法保证.
我没有测试过这个.