1

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

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

4

4 回答 4

6

这个编译器是什么?如今,大多数体面的编译器都支持 bswap 内在函数,GCC 在这里有一些解决方案,或者普通的内置列表

MSVC_byteswap_*在其RTL中具有(已优化为内在形式),而 ICC 包括内在形式_bswap*

于 2012-06-18T06:45:02.310 回答
5

htonl如果您不想自己动手,可以使用例如。

于 2012-06-18T06:21:52.633 回答
5
new_dword = (dword & 0x000000ff) << 24 | (dword & 0x0000ff00) << 8 |
    (dword & 0x00ff0000) >> 8 | (dword & 0xff000000) >> 24;
于 2012-06-18T06:47:07.657 回答
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
于 2012-06-18T07:07:34.020 回答