如何将二进制数组打印为字符

时间:2014-04-14 00:32:43

标签: c arrays printing binary character

我有一个包含28个整数的数组,它们都是1和0。但是,我需要将此信息打印为4个字符,因此如何将每个7字节的数据变为一位以便打印。

不确定这是否有意义所以我将说明我需要:

现在我的数组(按顺序)是:0101101111011101011000100010 但是我需要以某种方式取出前7个数字(0101101)并将其打印为Z,然后用下一个7,接下来的7个...

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我认为这可能是您正在寻找的方面。

int to_int(int *bits) {
   int power = 2;
   int digit = 1;
   int value = 0;

   int i=0;
   for(i=0; i <= 6; i++) {
        if(bits[i] == 1) {
            value += digit;
        }
        digit *= power;
    }

    return value;
}  


int main() {
    int myArray[28] = {0, 1, 0, 1, 1, 0, 1,
                    1, 1, 1, 0, 1, 1, 1,
                    0, 1, 0, 1, 1, 0, 0,
                    0, 1, 0, 0 ,0, 1, 0};

    char theChars[5];
    theChars[0] = to_char(&myArray[0]);
    theChars[1] = to_char(&myArray[7]);
    theChars[2] = to_char(&myArray[14]);
    theChars[3] = to_char(&myArray[21]);
    theChars[4] = '\0';
    printf("%s\n",&theChars[0]);
}

另外,我认为您的预期输出不正确。

答案 1 :(得分:0)

嗯,总有愚蠢的方式: 循环每7个街区。

int bytes=7;
for(int i=0; i++;i<4){
     double ASCII = 0;
     for(int j=0; i++;j<bytes){
     ASCII+=Math.pow(2, bytes-j-1)*array[i*bytes + j]
     }
     char c = (char) ASCII // you'll have some trouble with types here
}

答案 2 :(得分:0)

假设你的输入数组被调用inputBits[]尝试这样的事情:

const int input_bit_count = 28;
char output[input_bit_count / 7];
int outIdx = 0;

// step through the bit stream converting bits to 7-bit characters
for( int inIdx = 0; inIdx < input_bit_count; ){
    // shift over and add the next bit to this character
    output[outIdx] <<= 1;
    if( inputBits[inIdx] != 0 ){
        output[outIdx] |= 1;
    }

    inIdx++;
    if( inIdx % 7 == 0)
        // after each 7 bits, increment to next output character
        outIdx++;
}

// done processing, now print it out
for( int chIdx = 0; chIdx < input_bit_count / 7; chIdx++ ){
    printf( "%c", output[chIdx] );
}