2014-10-20 253 views
-1

我的代码(如下)接受一个带有十六进制值的文本文件,并将十六进制值转换为二进制,然后转换为十进制。然后,我只想通过在主函数中添加printf语句来打印输出。但我不明白为什么我的主函数中的printf语句是错误的?在此先感谢将十六进制转换为二进制,然后转换为十进制

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

int hex_to_binary(char *hex_string, char *binary_line); 
int bstr_to_dec(const char * str); 

int main() 
{ 
    FILE *file;; 
    file = fopen("obj.txt","r"); 
    char line[200]; 
    char binary_line[20]; 

    while(!feof(file)){ 
     fgets(line,100,file); 
     //hex_to_binary(line,binary_line); 
     //printf("%s\n", binary_line); 
     printf("%d\n",bstr_to_dec((hex_to_binary(line,binary_line))); //This line is having errors 
     memset(binary_line,0,20); 
    } 
    fclose(file); 
    getchar(); 
    return 0; 
} 

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

int bstr_to_dec(const char * str) 
{ 
    int val = 0;  
    while (*str != '\0') 
    { 
     val = 2 * val + (*str++ - '0'); 
    } 
    return val; 
} 

我得到这个错误

warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion] 
      printf("%d\n",bstr_to_dec((hex_to_binary(line,binary_line))); 
+0

'我找不出为什么我的主函数中的printf语句是错误的。它出什么问题了? – 2014-10-20 05:19:10

+0

更多(比)和hex_to_binary返回int不是字符串 – CharlieS 2014-10-20 05:41:10

+0

看起来像你在这个编程任务的第三个问题。注意:不要使用while(!feof(file)){fgets(line,100,file);',使用'while(fgets(line,sizeof line,file)!= NULL){'。 – chux 2014-10-20 05:57:52

回答

0

您关于“hex_in_binary”功能的使用作出错误。

hex_in_binary(char * hex_string,char * binary_line)总是返回0,并且binary_line的值被修改。

您不使用hex_in_binary的返回值作为bstr_to_dec的第一个参数,而是使用binary_line作为第一个argumetn。

在你的代码,下面一行如下

hex_to_binary(line,binary_line); 
    printf("%d\n",bstr_to_dec(binary_line)); 

您可能需要[]作为由Eric J.

大小提到纠正binary_line的大小

printf("%d\n",bstr_to_dec((hex_to_binary(line,binary_line))); //This line is having errors 

shoule被纠正的binary_line应该大于所用文本文件的一行中的最大十六进制字符数乘以4.

0

你只分配20个字符binary_line

char binary_line[20]; 

,但最终输出的总长度可以显著更长超过20个字符。如果十六进制输入超过5个十六进制字符,则将覆盖为binary_line分配的内存。

每个十六进制字符将产生4个二进制数字。

+0

我得到这个错误::警告:不兼容整数指针转换传递'int'到参数类型'const char *'[-Wint-conversion] printf(“%d \ n”,bstr_to_dec((hex_to_binary( line,binary_line))); – Landon 2014-10-20 05:27:25

+0

那个错误是因为hex_to_binary返回int,但是bstr_to_dec需要一个指向char的指针 – CharlieS 2014-10-20 05:42:56

0

首先,您在printf行上有4个开放括号'(',并且只有3个紧靠括号')''。

然后我们发现hex_to_binary(...)返回一个int,但bstr_to_dec(...)期待一个字符串参数。

要使用hex_to_binary(...)作为参数给bstr_to_dec(...),它需要返回一个字符串。

当前函数修改传入的binary_line []的内容,但在函数完成后不使用内容。好像你打算返回字符串,而是硬编码的int值返回到0。

提示:

char *hex_to_binary(char *hex_string) 
char binary_line[200]; 
... 
return binary_line; 
+0

我应该在哪里插入^^ – Landon 2014-10-20 06:35:58

+0

你应该重写函数看起来像这样。返回0.这只是糟糕的编程。 – CharlieS 2014-10-20 22:52:41

相关问题