Bytes to Binary in C

后端 未结 6 727
情书的邮戳
情书的邮戳 2021-02-04 14:22

I\'m trying to simply convert a byte received from fget into binary.

I know the value of the first byte was 49 based on printing the value. I now need to convert this in

相关标签:
6条回答
  • 2021-02-04 14:56

    Change

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

    to

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

    or

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

    or

    bits[i] = byte & 1;
    byte >>= 1;
    
    0 讨论(0)
  • 2021-02-04 14:58

    The problem you're having is that your assignment isn't resulting in a true or false value.

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

    This gets the value of the bit. You need to see if the bit is on or off, like this:

    bits[i] = (byte & (mask << i)) != 0;
    
    0 讨论(0)
  • 2021-02-04 15:04

    You may notice that your output has a couple 1's and 0's, but also powers of 2, such as 32. This is because after you isolate the bit you want using the mask, you still have to bit-shift it into the least-significant digit so that it shows up as a 1. Or you could use what other posts suggested, and instead of bit-shifting the result (something like 00001000 for example), you could simply use (result != 0) to fetch either a 1 or 0, since in C, false is 0, and comparisons such as != will return 1 as true (I think).

    0 讨论(0)
  • 2021-02-04 15:08
    #include<Stdio.h>
    #include <limits.h>
    void main(void) {
        unsigned char byte = 49;// Read from file
        unsigned char mask = 1; // Bit mask
        unsigned char bits[8];
        int i, j = CHAR_BIT-1;
              // Extract the bits
        for ( i = 0; i < 8; i++,j--,mask = 1) {
        // Mask each bit in the byte and store it
        bits[i] =( byte & (mask<<=j))  != NULL;
        }
        // For debug purposes, lets print the received data
        for (int i = 0; i < 8; i++) {
           printf("%d", bits[i]);
       }
       puts("");
    }
    
    0 讨论(0)
  • 2021-02-04 15:14

    One way, among many:

    #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;
    }
    
    0 讨论(0)
  • 2021-02-04 15:23

    This addition in place of that will work:

    bits[i]= byte & (mask << i); 
    bits[i] >>=i;
    
    0 讨论(0)
提交回复
热议问题