如何交换字节半字节?

时间:2016-06-23 18:05:35

标签: c++ bits

给定这些字节(十六进制表示):

0F  
1A  
2C  

我怎样才能得到:

F0  
A1  
C2  

2 个答案:

答案 0 :(得分:4)

使用bitwise operators

((x & 0x0f) << 4) | ((x & 0xf0) >> 4)

答案 1 :(得分:2)

你可以这样做:

((x & 0x0f) << 4 ) | ((( x & 0xf0) >> 4) & 0xf )

这看起来很像Josh Kelley的回答,但Josh的回答是错误的。这就是原因:

#include <stdio.h>

int main( int argc, char *argv[] )
{
  signed char x = 0x80;
  x >>= 4;
  printf( "%x\n", x ); 
}

提供输出:

0xfffffff8

因为>>运算符保留了移位操作数的符号位。即,最重要位中的1将向左传播以保留值的符号。