9

fget から受け取ったバイトを単純にバイナリに変換しようとしています。

値の出力に基づいて、最初のバイトの値が 49 であることがわかりました。これをバイナリ値に変換する必要があります。

unsigned char byte = 49;// Read from file
unsigned char mask = 1; // Bit mask
unsigned char bits[8];

  // Extract the bits
for (int i = 0; i < 8; i++) {
    // Mask each bit in the byte and store it
    bits[i] = byte & (mask << i);
}
 // For debug purposes, lets print the received data
for (int i = 0; i < 8; i++) {
printf("Bit: %d\n",bits[i]);
}

これは印刷されます:

Bit: 1
Bit: 0
Bit: 0
Bit: 0
Bit: 16
Bit: 32
Bit: 0
Bit: 0
Press any key to continue . . .

明らかに、これはバイナリ値ではありません。何か助けはありますか?

4

6 に答える 6

16

あなたが抱えている問題は、割り当てが真または偽の値にならないことです。

bits[i] = byte & (mask << i);

これにより、ビットの値が取得されます。次のように、ビットがオンかオフかを確認する必要があります。

bits[i] = (byte & (mask << i)) != 0;
于 2009-11-05T19:39:13.017 に答える
7

変化する

bits[i] = byte & (mask << i);

bits[i] = (byte >> i) & mask;

また

bits[i] = (byte >> i) & 1;

また

bits[i] = byte & 1;
byte >>= 1;
于 2009-11-05T19:40:43.263 に答える
4

多くの中から 1 つの方法:

#include <stdio.h>
#include <limits.h>

int main(void) {
    int i;
    char bits[CHAR_BIT + 1];
    unsigned char value = 47;

    for (i = CHAR_BIT - 1; i >= 0; i -= 1) {
        bits[i] = '0' + (value & 0x01);
        value >>= 1;
    }

    bits[CHAR_BIT] = 0;

    puts(bits);

    return 0;
}
于 2009-11-05T19:38:40.927 に答える
-1

その代わりにこの追加が機能します:

bits[i]= byte & (mask << i); 
bits[i] >>=i;
于 2012-06-28T10:14:11.053 に答える