二进制到C中的char?

时间:2015-07-29 14:27:37

标签: c

我有一个数组

bin =

     0     1     1     0     0     0     0     1
     0     1     1     0     0     1     0     1
     0     1     1     1     0     0     1     0
     0     1     1     1     0     0     1     1
     0     1     1     0     0     1     1     1
     0     1     1     0     1     0     1     0
     0     1     1     0     1     0     0     0
     0     1     1     0     0     0     0     1
     0     1     1     1     0     1     0     0
     0     0     1     0     0     1     1     1
     0     1     0     0     1     0     1     0
     0     1     0     0     1     0     0     0
  

数组中的每一行都是一个8位二进制字母

bin相当于此字符串aersgjhat'JH

这很简单,使用matlab,但我找不到如何将一个装满二进制8位字的表转换成C中的字符串。

3 个答案:

答案 0 :(得分:0)

你真的需要读取数组的每个字节 - 我假设'0'没有位设置而'1'是位设置...

设置每个位的循环可能会完成这项工作 - 如果我正确地读取你的数组......

unsigned char bin[] = {....}   // your array full of data
unsigned char output[ 16 ]      // you will need to set the output size...
int nIndex = 0;
int nOutIndex = 0;
....

// the inner loop ...
output[ nOutIndex ] = 0;
for( nIndex = 0; nIndex < 8; nIndex++ )
{
    if ( bin[ nIndex ] == 1 )
       output[ nOutIndex ] |= 1;

    output[ nOutIndex ] <<= 1;
}    

此示例显示了设置位和移位的简单方法。请注意,这只是内部循环,并且没有用于移动bin数组的代码(从第二个char开始。

答案 1 :(得分:0)

bin的类型是不重要的。它可能是某种整数类型。出于演示目的,我使用了类型uint8_t。您可以使用例如int类型。

程序可以按以下方式查看

#include <stdio.h>
#include <stdint.h>

int main( void )
{
    uint8_t bin[][8] =
    {    
        { 0, 1, 1, 0, 0, 0, 0, 1 },
        { 0, 1, 1, 0, 0, 1, 0, 1 },
        { 0, 1, 1, 1, 0, 0, 1, 0 },
        { 0, 1, 1, 1, 0, 0, 1, 1 },
        { 0, 1, 1, 0, 0, 1, 1, 1 },
        { 0, 1, 1, 0, 1, 0, 1, 0 },
        { 0, 1, 1, 0, 1, 0, 0, 0 },
        { 0, 1, 1, 0, 0, 0, 0, 1 },
        { 0, 1, 1, 1, 0, 1, 0, 0 },
        { 0, 0, 1, 0, 0, 1, 1, 1 },
        { 0, 1, 0, 0, 1, 0, 1, 0 },
        { 0, 1, 0, 0, 1, 0, 0, 0 },
    };

    const size_t N = sizeof( bin ) / sizeof( *bin ); 
    char s[N + 1] = { '\0' };

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < 8; j++  )
        {
            s[i] = ( ( unsigned char )s[i] << 1 ) | ( bin[i][j] & 1 );
        }
    }

    puts( s );
}    

程序输出

aersgjhat'JH

答案 2 :(得分:0)

value_so_far初始化为0

int value_so_far = 0;

读取一下,将value_so_far乘以2并添加该位

int bit;
if (scanf("%d", &bit) != 1) /* error */;
if (bit < 0 || bit > 1) /* error */;
value_so_far *= 2;
value_so_far += bit;

8次后,您的值为8位 重新启动。