在 C/C 中,反转字节中位顺序的最简单方法是什么?

新手上路,请多包涵

虽然有多种方法可以反转字节中的位顺序,但我很好奇开发人员实现的“最简单”是什么。反过来,我的意思是:

 1110 -> 0111
0010 -> 0100

这类似于 PHP 问题,但不是重复。

这类似于 C 问题,但不是重复。这个问题要求开发人员实现最简单的方法。 “最佳算法”关注内存和 CPU 性能。

原文由 nathan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
2 个回答

如果您谈论的是单个字节,那么查找表可能是最好的选择,除非由于某种原因您没有 256 个字节可用。

原文由 e.James 发布,翻译遵循 CC BY-SA 2.5 许可协议

作为开发人员,这是我最容易记住的方法:

 unsigned char   reverse_bits(unsigned char octet)
    {
        return  (((octet >> 0) & 1) << 7) | \
                (((octet >> 1) & 1) << 6) | \
                (((octet >> 2) & 1) << 5) | \
                (((octet >> 3) & 1) << 4) | \
                (((octet >> 4) & 1) << 3) | \
                (((octet >> 5) & 1) << 2) | \
                (((octet >> 6) & 1) << 1) | \
                (((octet >> 7) & 1) << 0);
    }


原文由 Maurice 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题