![](/img/trans.png)
[英]How do I convert this hex value in a u32_t to its corresponding char/ascii value?
[英]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'
。 要將十六進制數字af
或AF
轉換為 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.