Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何反转十六进制数的字节?_C - Fatal编程技术网

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

C 如何反转十六进制数的字节?,c,C,我想反转十六进制数的字节,如下所示: 0x08090a0b应转换为0x0b0a0908 我用过这个宏 #define REV(X) ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24)) #定义REV(X)((X>16)16)((X24)24)) # int main(无效) { //你的密码在这里 无符号整数X

我想反转十六进制数的字节,如下所示:

0x08090a0b
应转换为
0x0b0a0908

我用过这个宏

#define REV(X)      ((X << 24) | (((X>>16)<<24)>>16) | (((X<<16)>>24)<<16) | (X>>24))
#定义REV(X)((X>16)16)((X24)24))
#

int main(无效)
{
//你的密码在这里
无符号整数X=0x08090a0b;
printf(“%8x”,((X>16)16)|((X24)24));
返回0;
}
您的输出仅是正确的。您是说0最初没有显示吗

09=9
在您的例子x0b0a0908=b0a0908

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

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

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

那么您是否达到了您的要求?这个问题与反转整数真的不同吗?问题是什么?只有当
sizeof(X)>4
或者当X被签名时,我才能看到这种方法的问题。你能给我们一些解决方案的约束条件吗?这是一个任意长度的十六进制数吗?它是作为字符串输入的,还是作为整数输入的?我想你的问题以前已经被问过了,并且给出了一个很好的答案:解决方案没有限制。我只想反转32位整数的字节数。输入是整数,输出也是整数。非常简单的解释。表达敬意!
#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));