gpt4 book ai didi

c - 如何反转十六进制数的字节?

转载 作者:行者123 更新时间:2023-12-02 14:40:10 24 4
gpt4 key购买 nike

我想反转十六进制数的字节,例如:

0x08090a0b应转换为 0x0b0a0908 .

我用过这个宏。

#define REV(X)      ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24))

最佳答案

如果将移位与 mask 结合起来,会更清晰、更容易理解:下面我分别展示了完整的表达式及其组件。请注意,您不需要掩码中的前导零 - 我将其放在那里是为了清晰/对齐。并且您不需要第一项和最后一项的掩码,因为所有“不需要的”位都会从表达式中移出。

#define REV(X) ((X << 24) | (( X & 0xff00 ) << 8) | (( X >> 8) & 0xff00 ) | ( X >> 24 ))

一次一个字节:

#define R1(X) ((X & 0x000000ff ) << 24 )
#define R2(X) ((X & 0x0000ff00 ) << 8 )
#define R3(X) ((X & 0x00ff0000 ) >> 8 )
#define R4(X) ((X & 0xff000000 ) >> 24 )

要正确打印数字,请使用

printf("%08x", REV(x));

这将确保打印前导零。您必须确保您的输入是 32 位无符号整数才能正常工作。

关于c - 如何反转十六进制数的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com