私はその時点でバイナリファイルバイトを読み込み、そのバイトのビットを整数配列に格納したいと考えています。同様に、1と0の整数配列(8個)をバイトとしてバイナリファイルに書きたいのですか?あなたはバイトの配列がある場合はバイトをビットの配列に変換しますか? C
-1
A
答えて
3
:
unsigned char bytes[10];
をそしてビットの配列にそれを変更したい:
unsigned char bits[80];
そして、あなたはバイトあたり8ビットを持っていると仮定すると、これを試してみてください。
をint i;
for (i=0; i<sizeof(bytes)*8; i++) {
bits[i] = ((1 << (i % 8)) & (bytes[i/8])) >> (i % 8);
}
このループでは、i
は合計ビット数でループします。与えられたビットが生きるバイトはi/8
であり、これは整数の除算で切り捨てられます。バイト内のビットの位置はi%8
です。
まず私たちは、所望のビットのためのマスクを作成します。次に
1 << (i % 8)
希望のバイト:
bytes[i/8]
その後、我々は論理を実行し、私たちが望む1以外のすべてのビットをクリアします。
(1 << (i % 8)) & (bytes[i/8])
次に、結果をビット位置で右シフトして、最下位ビットに希望のビットを入れます。これにより、1または0の値が与えられます。
配列がunsigned
であることにも注意してください。これはビットシフトが適切に機能するために必要です。
戻すには:
int i;
memset(bytes, 0, sizeof(bytes));
for (i=0; i<sizeof(bytes)*8; i++) {
bytes[i/8] |= bits[i] << (i % 8);
}
は、我々は一度に各バイトの1ビットをセットすることがありますから、バイト配列をクリアすることによって開始します。
その後、我々は問題のビットを取る:その位置に
bits[i]
は、Shiftキーを:
bits[i] << (i % 8)
次に論理を使用するか、適切なバイトを設定します。
関連する問題
- 1. C#バイト配列に変換
- 2. JSONをCのバイト配列に変換
- 3. C#WPFバイト配列をビデオファイルに変換しますか?
- 4. C#でビットマップを2Dバイト配列に変換しますか?
- 5. C#オブジェクトの配列にオブジェクトのバイト配列を変換します。
- 6. C#でバイト配列をshort配列に変換する
- 7. 変換バイト配列
- 8. バイト配列をC#の文字列に変換する
- 9. PNG圧縮バイト配列をBMPバイト配列に変換する
- 10. NSDataをbase64エンコードに変換し、C#のバイト配列を
- 11. Swiftのバイト配列をUIImageに変換
- 12. C#バイト配列をC++に変換する
- 13. バイト配列を文字列に変換してバイト配列に戻す
- 14. バイト配列をブースト数値に/から変換しますか?
- 15. C++ UTFバイト配列を文字列に変換する
- 16. int16をバイト配列に変換する
- 17. 変換バイト配列 - ルビー
- 18. C#を使用してバイト配列のビットを設定する
- 19. C++変換文字列をバイト配列に変換する方法は?
- 20. ビット配列内の分割バイト配列
- 21. 文字列からバイト配列への変換C#
- 22. PILイメージをバイト配列に変換しますか?
- 23. Java mp3入力ストリームをバイト配列に変換しますか?
- 24. 暗号入力ストリームをバイト配列に変換しますか?
- 25. intを異なるバイト配列のサイズに変換します。
- 26. タプルをC++のバイト配列に変換する方法11
- 27. MACアドレスをC#のバイト配列に変換する
- 28. NSStringをバイト配列に変換する
- 29. バイト配列をUIImageに変換する
- 30. バイト配列をlongに変換する
I/Oはビット単位でほとんど機能しません。私が知っている限り、関数の読み取りと1のバッファサイズで1バイトずつ読むことができます。 – chris01
1のビットマスクを使用して入力に沿ってクロールすることはできますが、実質的に32ビットである。 8ビットのグループを格納するchar配列を試して、ビットシフトとマスクを使って個々のビットにアクセスすることができます。 – synchronizer
ビットシフトとビット単位操作について聞いたことがありますか? –