无符号整数为小端形式

时间:2012-11-30 20:21:35

标签: c++ 32-bit bit-shift

  

可能重复:
  convert big endian to little endian in C [without using provided func]

我遇到了这一部分的问题:如果我想取32位数,我想将其字节(1字节= 8位)从大端移位到小端形式。例如:

假设我有1号。

在32位中,这就是它的样子:

1st byte 2nd byte 3rd byte 4th byte
00000000 00000000 00000000 00000001

我希望它看起来像这样:

4th byte 3rd byte 2nd byte 1st byte 
00000001 00000000 00000000 00000000 

以便首先显示值最小的字节。我以为你可以使用for循环,但我不确定如何在C ++中移位位/字节。例如,如果用户输入1并且我必须像上面的例子一样移位它的位,我不确定如何将1转换为位,然后移位。有人能指出我正确的方向吗?谢谢!

3 个答案:

答案 0 :(得分:4)

<<>>是C和大多数其他C风格语言中的按位移位运算符。

做你想做的事的一种方法是:

int value = 1;
uint x = (uint)value;
int valueShifted = 
    ( x << 24) |                // Move 4th byte to 1st
    ((x << 8) & 0x00ff0000) |  // Move 2nd byte to 3rd
    ((x >> 8) & 0x0000ff00) |  // Move 3rd byte to 2nd
    ( x >> 24);                 // Move 4th byte to 1st

答案 1 :(得分:2)

uint32_t n = 0x00000001;
std::reverse( (char*)&n, (char*)(&n + 1) );
assert( n == 0x01000000 );

答案 2 :(得分:0)

使用<<>>运算符进行移位。与逐位AND(&)和OR(|)运算符一起,您可以执行您想要的操作:

 int value = 1;
 int shifted = value << 24 | (value & 0x0000ff00) << 8 | (value & 0x00ff0000) >> 8 | (value & 0xff000000) >> 24;