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 に答える