我有一个数组
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中的字符串。
答案 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位 重新启动。