2015-07-29 2 views
-2

У меня есть массивдвоичный код в 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 двоичных разрядов письмо

бен эквивалентно этой строке aersgjhat'JH

Это очень просто с помощью MATLAB, но я не мог найти, как преобразовать таблицу, полную двоичных 8-битных слов, в строку в C.

+2

что такое 'erray'? –

+2

Добро пожаловать в переполнение стека! Пройдите [tour] (http://stackoverflow.com/tour) и прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, чего мы ожидаем от вопросов здесь. Имейте в виду, что мы не предоставляем службу кодирования _from-scratch_. Пожалуйста, покажите нам, что вы уже пробовали, как это не удалось, и мы могли бы помочь. :-) –

+0

Также читайте о [Позиционная нотация] (https://en.wikipedia.org/wiki/Positional_notation) –

ответ

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 
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; 
}  

В этом примере показан простой способ установки бит и смещения. Обратите внимание, что это только внутренний цикл, и нет кода для перемещения по массиву бункеров (начиная со второго символа).

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-битное значение.
Перезагрузка.

Смежные вопросы