在DWORD中交换字节

时间:2012-06-18 06:18:17

标签: c++

我有DWORD,例如:0x0A0B0C0D。我想获得0x0D0C0B0A

我通常使用BSWAP汇编指令,但我使用的是不支持内置声明的编译器。

4 个答案:

答案 0 :(得分:5)

您可以使用例如htonl如果你不想做一点点蠢蠢欲动。

答案 1 :(得分:5)

new_dword = (dword & 0x000000ff) << 24 | (dword & 0x0000ff00) << 8 |
    (dword & 0x00ff0000) >> 8 | (dword & 0xff000000) >> 24;

答案 2 :(得分:4)

这个编译器是什么?目前大多数体面的编译器都支持bswap内部,GCC有一些解决方案hereplain builtin list

MSVC在其RTL中有_byteswap_*(已针对内在形式进行了优化),ICC包含_bswap*内在函数。

答案 3 :(得分:1)

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