我有一个DWORD
,例如:0x0A0B0C0D
。我想获得0x0D0C0B0A
.
我通常使用BSWAP
汇编指令,但我使用的编译器不支持内置汇编。
htonl
如果您不想自己动手,可以使用例如。
new_dword = (dword & 0x000000ff) << 24 | (dword & 0x0000ff00) << 8 |
(dword & 0x00ff0000) >> 8 | (dword & 0xff000000) >> 24;
http://www.cplusplus.com/forum/beginner/2563/
考虑一个手动重新排序位的例程。
与可能不适合您需求的替代方案相比,这几乎可以保证最大程度地降低速度。
#include <iostream>
#include <limits.h>
unsigned int rearrange(unsigned int val);
int main() {
unsigned int a = 0xa0b0c0d0;
std::cout << std::hex << std::showbase
<< a << '\n'
<< rearrange(a) << std::endl;
}
unsigned int rearrange(unsigned int val) {
return (val & 0xff000000) >> CHAR_BIT * 3 |
(val & 0x00ff0000) >> CHAR_BIT |
(val & 0x0000ff00) << CHAR_BIT |
(val & 0x000000ff) << CHAR_BIT * 3;
}
输出
0xa0b0c0d0
0xd0c0b0a0