簡體   English   中英

如何將 hex 文件轉換為其等效的 char 文件?

[英]How do I convert a hex file to its equivalent char file?

我有一個包含“hello world”的文件。 我已將其轉換為十六進制文件“68656c6c6f20776f726c640a”。 現在我希望它將十六進制文件轉換為其原始內容。 我該怎么做? 我嘗試從十六進制文件中獲取一個字符並將其轉換為等效字符,但每次它都拾取一個字符 6 而不是 68。請幫忙。

int main()
{
     FILE *fp, *fptr;
     char c;
     fp = fopen ( "example1.txt", "r" ) ;
     fptr = fopen ( "example2.txt", "w" );
     while ( (c=fgetc(fp)) != EOF )
     {
          fputc(c, fptr);
     }
     fclose (fp);
     fclose(fptr);
     return 0;
}

預計 output:你好世界 output 我得到:68656c6c6f20776f726c640a

您應該將兩位數字讀取為十六進制值,這會將它們轉換回字符:

喜歡:

 int tmp;
 while ( fscanf(fp,"%2x",&tmp) > 0 )
 {      
     fputc(tmp, fptr);
 }

實際上,正如評論中所指出的,您應該讀取 2 個連續字符,將它們(例如使用 strtol)組合成一個十六進制數字(ASCII 值的十六進制表示),然后將其作為字符寫入 output 文件。 以下代碼在 VS2019 上測試:

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

#pragma warning(disable: 4996)

int main()
{
FILE* fp, * fptr;
char c1,c2;
fp = fopen("c:\\temp\\example1.txt", "r");
fptr = fopen("c:\\temp\\example2.txt", "w");
while ((c1 = fgetc(fp)) != EOF)
{
    unsigned char to_ascii;
    char s1[2] = { '\0','\0' }, s2[2] = { '\0','\0' };

    c2 = fgetc(fp);

    s1[0] = c1;
    s2[0] = c2;     

    to_ascii = 16 * strtol(s1,NULL,16) + strtol(s2, NULL,16);

    fprintf(fptr, "%c", to_ascii);
}
fclose(fp);
fclose(fptr);
return 0;
}

您可以讀取成對的字符並進行轉換。 要將數字字符的 charset 值轉換為其數字值,請減去'0' 要將十六進制數字afAF轉換為 10-15,請減去'A''a'並加 10。

把它們放在一起:

#include <stdio.h>
#include <ctype.h>  /* for isdigit, etc.    */

int hexdigitval(int c)
{
    if(isdigit(c)) return c - '0';
    if(isupper(c)) return c - 'A' + 10;
    if(islower(c)) return c - 'a' + 10;
    /* can't happen */
    return 0;
}

int main()
{
    int c1, c2;
    int d1, d2;
    int newc;

    while((c1 = getchar()) != EOF) {
        if(!isxdigit(c1)) continue;
        c2 = getchar();
        if(c2 == EOF) break;
        if(!isxdigit(c2)) continue;
        d1 = hexdigitval(c1);
        d2 = hexdigitval(c2);
        newc = 16 * d1 + d2;
        putchar(newc);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM