2014-10-13 3 views
0

Я знаю, что этот вопрос кажется знакомым с этим Conversion of Char to Binary in C, но не совсем то же самое. Я преобразовываю массив символов в двоичные целые числа. В качестве второго шага я пытаюсь объединить их в массив целых чисел. Я преобразовываю целые числа обратно в символы, чтобы я мог их конкатенировать. Сценарий работает нормально, но по какой-то причине я не могу понять, когда я печатаю всю строку, в начале строки создается непечатаемый символ.Как преобразовать массив символов в двоичный массив на языке C

Пример кода:

#include <stdio.h> 
#include <string.h> 

int main(void) { 

    char *temp; 
    char str[2]; 
    char final[32]; 

    for (temp = "LOCL"; *temp; ++temp) { 
    int bit_index; 
    for (bit_index = sizeof(*temp)*8-1; bit_index >= 0; --bit_index) { 
     int bit = *temp >> bit_index & 1; 
     printf("%d ", bit); 

     snprintf(str, 2, "%d", bit); 
     printf("This is test: %s\n",str); 
     strncat(final , str , sizeof(final)); 
    } 
    printf("\n"); 
    } 
    printf("This is the array int: %s\n",final); 

    return 0; 
} 

Может кто-то помочь мне понять, где я неправильно?

Заранее благодарим за внимание и время, чтобы помочь мне.

+1

Вы знаете относительный приоритет '' >> и '&' в '* Темп >> bit_index & 1'? Знает ли компилятор? Вы оба согласны? Я настоятельно рекомендую использовать круглые скобки в интересах тех, кто приходит после, даже если вы сразу знаете ответ. Отдельно, возможно, вам следует показать вывод, который вы получаете, и нужный результат. Это может облегчить людям помощь вам. –

+0

Обратите внимание, что вы сообщаете 'strncat()', что это нормально, чтобы записать символы 'sizeof (final)' после окончания любой строки, уже сохраненной в 'final'. Интерфейс 'strncat()' еще хуже, чем интерфейс 'strncpy()'; очень сложно получить код правильно, и вы должны знать, как долго строка в целевой, прежде чем вы сможете сказать, сколько места осталось, что действительно делает ее бессмысленной (вы можете использовать 'memmove()' или ' memcpy() 'или' strcpy() 'или, возможно,' strncpy() 'вместо). Я бы забыл, что 'strncpy()' существует - я только работаю с ним в Stack Overflow, когда люди спрашивают. –

+0

Эта строка: окончательный символ [32]; должен быть char final [32] = {'\ 0'}; поэтому строка всегда заканчивается нулем. – user3629249

ответ

5

Вы просто забыли инициализировать final, поэтому вы объединяете свою двоичную строку на любой мусор, находящийся в final при запуске кода. Вы также должны разрешить один дополнительный символ в final (для хранения терминатора). Изменение:

char final[32]; 

к:

char final[33] = ""; 
+1

'final [32];' может быть слишком маленьким на 1. – chux

+0

@chux: хорошая точка - ответ обновлен. –

+0

@PaulR - после создания 'char final [33];' будет ли работать 'final [0] = 0;' на следующей строке ?, (или просто использовать memset()) – ryyker

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