当前位置:  开发笔记 > 运维 > 正文

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

如何解决《有没有标准的C函数用于bitwapping?》经验,为你挑选了1个好方法。

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

我没有测试过这个.



1> Keith Thomps..:

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

我没有测试过这个.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有