在C中将字节数组转换为char数组

时间:2017-07-31 11:30:29

标签: c

所以我正在逐字节地读取.img文件,如下所示:

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数组,以便比较两者(或者如果有其他任何方式你可以看到做这个任务)。

非常感谢您的帮助!

编辑:

解决方案感谢:Iharob Al 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");
    } 
}   
}

1 个答案:

答案 0 :(得分:0)

是的,fread()void *作为第一个参数,因此您只需将list声明为char 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>