0

値をリトルエンディアンからビッグエンディアンに(およびその逆に)変換しようとしています。値は単一の整数ではなく、ビットの配列として表されます。エンディアンスワップ関数を実装するにはどうすればよいですか?

4

2 に答える 2

2

私は実際にはC++の人間ではないので、これを一般的に行うだけです。

ビッグエンディアンからリトルエンディアンに変換することは、バイトを逆にすることです。つまり、8ビットのセグメントです。

Nしたがって、バイトの配列がある場合(ここでは疑似コード化されています):

bool bits[8*N];

あなたはこのようなことをするでしょう:

for(int i = 0; i < N/2; i++) {
    for(int j = 0; j < 8; j++) {
        bool tmp = bits[8*i+j];
        bits[8*i+j] = bits[8*(N-i-1)+j];
        bits[8*(N-i-1)+j] = tmp;
    }
}

コメントの中で、「ビット」は実際には後で正しいビットに評価される式へのポインタであるとおっしゃいました。この方法でポインタの順序を適切に変更すると、後でビットを取得するときにエンディアンが正しく変更されます。

于 2012-06-05T02:32:46.563 に答える
1

この優れた記事を確認できます。ここでは、異なるエンディアンでデータを交換および処理する方法についてすべて説明されています。また、一連の関数endian.hが役に立つかもしれません。

于 2012-09-24T10:24:07.140 に答える