C++ 在DWORD中交换字节

C++ 在DWORD中交换字节,c++,C++,我有一个DWORD,例如:0x0A0B0C0D。我想获得0x0D0C0B0A 我通常使用BSWAP汇编指令,但我使用的编译器不支持内置组件。如果你不想做自我旋转,你可以使用。如果你不想做自我旋转,你可以使用。如果你不想做自我旋转,你可以使用。这个编译器是什么?如今,大多数体面的编译器都支持bswap内部版本,GCC有一些解决方案,或者说 MSVC在its中有\u byteswap.*(优化为内在形式),ICC包括\u bswap*内部语言。这个编译器是什么?如今,大多数体面的编译器都支持bswa

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


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

如果你不想做自我旋转,你可以使用。

如果你不想做自我旋转,你可以使用。

如果你不想做自我旋转,你可以使用。

这个编译器是什么?如今,大多数体面的编译器都支持bswap内部版本,GCC有一些解决方案,或者说


MSVC在its中有
\u byteswap.*
(优化为内在形式),ICC包括
\u bswap*
内部语言。

这个编译器是什么?如今,大多数体面的编译器都支持bswap内部版本,GCC有一些解决方案,或者说

new_dword = (dword & 0x000000ff) << 24 | (dword & 0x0000ff00) << 8 |
    (dword & 0x00ff0000) >> 8 | (dword & 0xff000000) >> 24;
MSVC在its中有
\u byteswap.*
(优化为内在形式),ICC包括
\u bswap.*
内部函数。

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

考虑一个手动重新排序位的例程。
与可能不适合您的需求的备选方案相比,这几乎可以保证速度最慢

#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;
}

考虑一个手动重新排序位的例程。
与可能不适合您的需求的备选方案相比,这几乎可以保证速度最慢

#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;
}

为什么不使用普通字节移位,然后使用and组合所有字节?您在性能方面有什么要求吗?正如Necrolis所说,请在问题陈述中说明您使用的编译器。为什么不使用普通字节移位,然后使用and来组合所有字节?您在性能方面有什么要求吗?正如Necrolis所说,请在问题陈述中说明您使用的编译器。+1:但有一个问题,OP是否能够
#包括
?:)@我可能会说这很有趣,这取决于平台-
htonl
是big-endian系统上的一个无操作。+1:不过有一个问题,操作能否
#包括
?:)@我可能会说这很有趣,这取决于平台-
htonl
在big-endian系统上是不可操作的。