字节到二进制在C中

BSc*_*ker 9 c binary byte bit

我试图简单地将从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]);
}
Run Code Online (Sandbox Code Playgroud)

这将打印:

Bit: 1
Bit: 0
Bit: 0
Bit: 0
Bit: 16
Bit: 32
Bit: 0
Bit: 0
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

显然,这不是二进制值.有帮助吗?

Aar*_*ron 16

您遇到的问题是您的作业不会导致真值或假值.

bits[i] = byte & (mask << i);
Run Code Online (Sandbox Code Playgroud)

这得到了该位的值.您需要查看该位是打开还是关闭,如下所示:

bits[i] = (byte & (mask << i)) != 0;
Run Code Online (Sandbox Code Playgroud)


qrd*_*rdl 7

更改

bits[i] = byte & (mask << i);
Run Code Online (Sandbox Code Playgroud)

bits[i] = (byte >> i) & mask;
Run Code Online (Sandbox Code Playgroud)

要么

bits[i] = (byte >> i) & 1;
Run Code Online (Sandbox Code Playgroud)

要么

bits[i] = byte & 1;
byte >>= 1;
Run Code Online (Sandbox Code Playgroud)