2014-10-20 259 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

相關問題