首页 文章

从二进制文件中读取struct并在C中转换为Hex

提问于
浏览
0

我正在尝试从二进制文件中读取一个简单的结构,并将其转换为十六进制 .

我在尝试将东西打印到窗口时遇到了问题 . “块”数据是一大块,所以我希望它能够在第一个printf的窗口中打印出大量的二进制文件,然后在第二个printf中打印出hex . 但是,它只打印一行int,绝对不是它应该的十六进制(它应该是一个非常长的char)

我想知道我做错了什么?我是否必须在每个字节上迭代一个while循环并在变换之前将其转换为byte_array?或者我的错误类型?

这是我的代码:

void myChunks(){

    struct chunkStorage
    {
        char chunk;     // ‘Chunk of Data’
    };

    unsigned long e;

            FILE *p;
            struct chunkStorage d;
            p=fopen(“myfile.txt”,”rb");
            fread(&d.chunk,sizeof(d.chunk),1,p);
            printf(d.chunk);
            e = hex_binary(d.chunk);
            printf(e);
            fclose(p);

}

int hex_binary(char * res){
    char binary[16][5] = {"0000", "0001", "0010", "0011", "0100", "0101","0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110","1111"};
    char digits [] = "0123456789abcdef";

    const char input[] = ""; // input value
    res[0] = '\0';
    int p = 0;
    int value =0;
    while(input[p])
    {
        const char *v = strchr(digits, tolower(input[p]));
        if(v[0]>96){
            value=v[0]-87;
        }
        else{
            value=v[0]-48;
        }
        if (v){
            strcat(res, binary[value]);
        }
        p++;
    }
    return res;
    //printf("Res:%s\n", res);
}

1 回答

  • 0

    二进制到十六进制应该在此代码中工作 . 它用 gcc 编译,但我没有测试它 . 我希望下面的代码可以帮助您以您想要的方式使用二进制文件 .

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    int binary2hex(char bin) {
        char *a = &bin;
        int num = 0;
        do {
            int b = *a == '1' ? 1 : 0;
            num = (num << 1) | b;
            a++;
        } while (*a);
        printf("%X\n", num);
        return num;
    }
    
    void main() {
        struct chunkStorage {
            char chunk;     // ‘Chunk of Data’
        };
        unsigned long e;
        FILE *p;
        struct chunkStorage d;
        p = fopen("myfile.txt", "rb");
        fread(&d.chunk, sizeof(d.chunk), 1, p);
        printf("%c", d.chunk);
        e = binary2hex(d.chunk);
        printf("%lu", e);
        fclose(p);
    }
    

相关问题