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