2017-07-31 49 views
-2

所以我從字節.img文件字節讀取如下所示:轉換字節數組字符數組用C

void print_img_section(FILE * f, int start, long int size, char * target_file_name) 
{ 
    unsigned char list[size]; 

    fseek(f, start, 0); 
    if (fread(list, 1, size, f) <= 0) { 
     fprintf(stderr, "problems reading directory from image\n"); 
     exit(1); 
    } 
} 

我想以某種方式比較target_file_namelist,看它們是否匹配。然而,list是十六進制值的數組,例如{AB,1E,16},所以我想知道有一種方法可以將list轉換爲char數組,以便比較這兩個值(或者如果有任何其他方式可以看到這個任務)。

非常感謝您的幫助!

編輯:

SOLUTION感謝:Iharob鋁Asimi

void print_file_name(FILE * f, int start, long int size) 
{ 
unsigned char list[size+1]; 
char * test = "alphabet_short.txt"; 

fseek(f, start, 0); 
if (fread(list, 1, size, f) <= 0) { 
    fprintf(stderr, "problems reading directory from image\n"); 
    exit(1); 
} 

else { 
    list[size+1] = '\0'; 
    if (strcmp(list, test) == 0) { 
     fprintf(stdout, "they match!\n"); 
    } 
} 
} 
+0

你的意思是'list'包含一個**字符串**和十六進制表示的字節?如果沒有,這是不明確的:'char'和* byte *在C中是同義詞。 –

+0

'target_file_name'的內容是什麼?它指向什麼?它指向一個單獨的字節數組(類似於'list')還是指向一個字符串? –

+0

首先,歡迎來到#c,我們通常不是一個友好的團隊,對此感到抱歉,並且堅持下去,這是一次美好的體驗:)字節和字符在c中是一樣的。您確定要將char數組「target_file_name」與uchar數組「list」的內容進行比較嗎?此外,沒有什麼是「以十六進制存儲」。 – DusteD

回答

0

是,fread()需要void *,因爲它是第一個參數,所以你可以簡單地聲明listchar list[size];然後用strcmp()

但要做到這一點,你需要'\0'終止list,這樣

void 
print_img_section(FILE *f, int start, long int size, char *target_file_name) 
{ 
    unsigned char list[size + 1]; 
    size_t readsize; 

    fseek(f, start, 0); 
    if ((readsize = fread(list, 1, size, f)) <= 0) { 
     fprintf(stderr, "problems reading directory from image\n"); 
     exit(1); 
    } else { 
     list[readsize] = '\0'; 
     if (strcmp(list, target_file_name) == 0) { 
      fprintf(stdout, "they match!\n"); 
     } 
    } 
} 

不要忘記#include <string.h>

+0

我不認爲可以假設'target_file_name'或文件不包含任何空字符? – Groo

+1

@Groo假設'target_file_name'是一個字符串,因此有1個和只有1個空值字符值得關注 - 即使OP的不精確的措辭也是合理的。用'list [readsize] ='\ 0';','list'至少有一個空字符。額外的空字符的存在不會導致意外的'strcmp()'結果。 – chux

+0

@chux:我不確定OP是否明白這一點,它不僅僅是一個命名不清的參數。我也不知道'.img'文件結構,所以我也不知道他在從文件中讀取什麼,只是想用'strcmp'提到這個問題。 – Groo

相關問題