可能重复:
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转换为位,然后移位。有人能指出我正确的方向吗?谢谢!
答案 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;