2014-10-19 2 views
0

Может кто-то, пожалуйста, помогите мне исправить свой код. У меня есть текстовый файл с шестнадцатеричными значениями. Теперь мне нужно преобразовать шестнадцатеричное значение в двоичное и распечатать его. Это мой код до сих пор:Как преобразовать шестнадцатеричное значение в двоичное значение в C

#include <stdio.h> 
#include <stdlib.h> 
#define MAX 1000 

int hex_to_binary(char *argv[]) 

int main(int argc,char *argv[]) 
{ 
    FILE *file; 
    file = fopen(argv[1],"r"); 
    char line[100]; 

    while(!feof(file)){ 
     fgets(line,100,file); 
     hex_to_binary(line); 
    } 
    fclose(file); 

    return 0; 
} 

int hex_to_binary(char *argv[]){ 
    char binaryNumber[MAX],hexaDecimal[MAX]; 
    long int i=0; 

    scanf(“%s”,argv[1]); 

    printf("\nEquivalent binary value: "); 
    while(hexaDecimal[i]){ 
     switch(hexaDecimal[i]){ 
      case '0': printf("0000"); break; 
      case '1': printf("0001"); break; 
      case '2': printf("0010"); break; 
      case '3': printf("0011"); break; 
      case '4': printf("0100"); break; 
      case '5': printf("0101"); break; 
      case '6': printf("0110"); break; 
      case '7': printf("0111"); break; 
      case '8': printf("1000"); break; 
      case '9': printf("1001"); break; 
      case 'A': printf("1010"); break; 
      case 'B': printf("1011"); break; 
      case 'C': printf("1100"); break; 
      case 'D': printf("1101"); break; 
      case 'E': printf("1110"); break; 
      case 'F': printf("1111"); break; 
      case 'a': printf("1010"); break; 
      case 'b': printf("1011"); break; 
      case 'c': printf("1100"); break; 
      case 'd': printf("1101"); break; 
      case 'e': printf("1110"); break; 
      case 'f': printf("1111"); break; 
      default: printf("\nInvalid hexadecimal digit %c ",hexaDecimal[i]);        return 0; 
    } 
    i++; 
} 

return 0; 

}

я получаю ошибки, такие как:

part1_V2.c: In function ‘hex_to_binary’: 
part1_V2.c:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
part1_V2.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
part1_V2.c:26: error: stray ‘\342’ in program 
part1_V2.c:26: error: stray ‘\200’ in program 
part1_V2.c:26: error: stray ‘\234’ in program 
part1_V2.c:26: error: stray ‘\342’ in program 
part1_V2.c:26: error: stray ‘\200’ in program 
part1_V2.c:26: error: stray ‘\235’ in program 
part1_V2.c:59: error: expected ‘{’ at end of input 

Заранее спасибо!

Хорошо, ребята, спасибо за вашу помощь я получил мой код работает, но теперь я есть проблемы с выходом:

текстового файла Перехожу к основной функции содержит:

«1283» (line1) "5105" (следующая строка)

Это шестнадцатеричные значения в файле. Поэтому, когда я запускаю программу я получаю выход:

Эквивалента двоичного значения: 0001001010000011 nvalid шестнадцатеричной цифры Invalid шестнадцатеричной цифры
Эквивалента двоичного значения: 0101000100000101

Я задаюсь вопросом, почему я получаю неверные шестнадцатеричный цифровой вывод? Это потому, что он пытается преобразовать «\ n» или пустое пространство в двоичный?

+0

Действительно? Компиляция? – rendon

+1

Как насчет добавления ';' в конце строки 5? – rendon

+0

Любопытно, что/кто предложил использовать 'feof (файл)' для определения EOF? – chux

ответ

0

Есть некоторые синтаксические ошибки в коде. Попробуйте измененный код. Если вы передаете правильные параметры для основных(), чем это должно работать:

#include <stdio.h> 

int hex_to_binary(char*); 

int main(int argc, char *argv[]) 
{ 
    FILE *file; 
    file = fopen(argv[1],"r"); 
    char line[100]; 

    while(!feof(file)){ 
     fgets(line,100,file); 
     hex_to_binary(line); 
    } 
    fclose(file); 
    getchar(); 
    return 0; 
} 

int hex_to_binary(char* hex_string) 
{ 
    int i=0; 
    printf("\nEquivalent binary value: "); 
    while(hex_string[i]) 
    { 
     switch(hex_string[i]) 
     { 
      case '0': printf("0000"); break; 
      case '1': printf("0001"); break; 
      case '2': printf("0010"); break; 
      case '3': printf("0011"); break; 
      case '4': printf("0100"); break; 
      case '5': printf("0101"); break; 
      case '6': printf("0110"); break; 
      case '7': printf("0111"); break; 
      case '8': printf("1000"); break; 
      case '9': printf("1001"); break; 
      case 'A': printf("1010"); break; 
      case 'B': printf("1011"); break; 
      case 'C': printf("1100"); break; 
      case 'D': printf("1101"); break; 
      case 'E': printf("1110"); break; 
      case 'F': printf("1111"); break; 
      case 'a': printf("1010"); break; 
      case 'b': printf("1011"); break; 
      case 'c': printf("1100"); break; 
      case 'd': printf("1101"); break; 
      case 'e': printf("1110"); break; 
      case 'f': printf("1111"); break; 
      default: printf("\nInvalid hexadecimal digit %c ", hex_string[i]); 
     } 
     i++; 
    } 
    return 0; 
} 
+0

Спасибо. Теперь у меня проблема с выпуском. Я передаю основную функцию: 1283, а затем следующую строку: 5105. Это шестнадцатеричные значения в файле. Поэтому, когда я запускаю программу, я получаю вывод: Эквивалентное двоичное значение: 0001001010000011 nvalid шестнадцатеричная цифра Неверная шестнадцатеричная цифра Эквивалентное двоичное значение: 0101000100000101 Мне интересно, почему я получаю недопустимый вывод шестнадцатеричной цифры? Это потому, что он пытается преобразовать «\ n» или пустое пространство в двоичный? – Landon

+0

Просто хотел ответить вам на «\ n». Я худой k тоже. – Seprum

1

Похоже, в вашем коде есть несколько символов не-ascii, например. « и », который должен быть ". То, что осталось в синтаксических и ошибке типа.

0

вы первый незначительные ошибки при определении функции в строке 5. Добавить точку с запятой на конце:

int hex_to_binary (char * argv []);

Также в не использовать для него, поэтому удалить строку:

зсапЕ («% S», ARGV [1]);

И перепишем время цикла:

while(hexaDecimal[i]!='\n' && hexaDecimal[i]!='\0') 
{ 
    switch(hexaDecimal[i]) 
    { 
    ... 
    } 
    i++; 
} 

Примечание Термическое i++ находится в пределах цикла. Плюс оператор return 0 на конце находится вне любой функции. Переместите его.

Надеюсь, это поможет!

0

Как указано в комментариях, вы не указали ; в строке 5.

Отсутствует ; может привести к каскаду ошибок, из-за того, что компилятор ищет что-то, что должно закончиться выводом (который не закончился ;).

Я собираюсь войти в режим преподавателя, поэтому заранее извиняюсь, если я натолкнулся на снисхождение.


Имея это в виду, попытка исправить каждую ошибку, в свою очередь. Сообщения об ошибках всегда выглядят действительно технически, но если вы остановитесь и прочитаете, это даст много информации.

Итак, для вашей первой ошибки в строке 8 говорится, что она ожидала, что что-то будет {. Поскольку это начало основной функции, содержимое строк 7-8 является правильным, поэтому ошибка должна быть до этих двух строк.

Перед вашей основной функцией является прототип функции, которая ... аха ... отсутствует точка с запятой.

Что касается ошибок, заявленных stray \xxx in program, это, скорее всего, потому, что вы скопировали строку scanf("%s", argv[1]) из словаря или веб-сайта и скопировали отформатированную пару кавычек.

Чтобы исправить, просто удалите кавычки и введите их вручную.