如何在C中将十六进制值转换为二进制值

时间:2014-10-19 20:36:41

标签: c binary hex

有人可以帮我修复我的代码。我有一个十六进制值的文本文件。现在我需要将十六进制值转换为二进制并打印它。到目前为止,这是我的代码:

#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

提前致谢!

好的家伙感谢您的帮助,我的代码正常运行,但现在我的输出有问题:

我传递给main函数的文件包含:

&#34; 1283&#34; (第1行)    &#34; 5105&#34; (下一行)

这些是文件中的十六进制值。因此,当我运行程序时,我得到输出:

等效二进制值:0001001010000011 无效的十六进制数字 无效的十六进制数字
等效二进制值:0101000100000101

我想知道为什么我得到无效的十六进制数字输出?是因为它试图转换&#34; \ n&#34;或空格到二进制?

4 个答案:

答案 0 :(得分:1)

您的代码中似乎有几个非ascii字符,例如,应为&#34; 。 剩下的是语法和类型错误。

答案 1 :(得分:0)

您的代码中存在一些语法错误。试试这个修改后的代码如果要将正确的参数传递给main()而不是它应该工作:

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

答案 2 :(得分:0)

你的第一个小错误是在第5行的函数定义。最后添加一个分号:

  

int hex_to_binary(char * argv []);

此外没有用,所以删除行:

  

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

并重写while循环:

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

注意i++是在循环内。此外,最后的return 0语句不在任何函数之外。将其移入。

希望这有帮助!

答案 3 :(得分:0)

如评论中所述,您在第5行缺少;

由于编译器正在寻找结束语句的东西(;没有结束),因此缺少;会导致一连串的错误。

我将进入教师模式,所以如果我遇到居高临下的话,我会提前道歉。


请注意,请尝试依次修复每个错误。错误消息看起来总是很技术性的,但是如果你停下来阅读它会提供很多信息。

因此,对于您的第一个错误,在第8行,它表示期待某些内容为{。由于这是主函数的开始,因此第7-8行的内容是正确的,因此错误必须在之前这两行。

在您的主要功能是函数原型之前,... aha ... 缺少分号

关于stray \xxx in program的错误,可能是因为您已从word文档或网站复制了scanf("%s", argv[1])行,并且它复制了一对格式化的引号。

要修复,只需删除引号并手动输入。