我有一个软件,它读取文件并将其存储在char *数组中。其中有一些子字符串包含“\ xhh”转义字符 这意味着该数字存储为“\ xhh”字符串,其中'h'是一个数字,每个字符都是separetad。即转义字符不会存储为一个字符。
让我们假设str是缓冲区中的一个子字符串,它包含一些带有“\ xhh”格式的转义字符串。例如,值现在为“\ x41”。
我希望它与转义字符“\ x”一样打印。 显式打印会导致字符串本身:
printf(str); //->prints "\x41" and not "A"
我尝试用%x打印它:
char* tmp = malloc(sizeof(char)*5);
tmp[0] = '0';
tmp[1] = 'x';
tmp[2] = (char)*(p+1);
tmp[3] = (char)*(p+2);
tmp[4] = '\0'; // Now tmp contains "0x41"
printf("%x",(long)strtol(tmp, NULL, 16)); //->prints 65
printf("\n\x41\n"); //->prints "A"
我尝试的每次转换都不会带来“A”结果。我该如何正确打印?
答案 0 :(得分:1)
要将字符放在C中通常不可表示的字符串中,您可以将其作为十六进制转义字符放入,例如:
"A string with an \x0d"
编译器用十六进制字符13(回车符)替换字符串中的\x0d
。所以这就是编译时间。
要将/任何字符打印为十六进制数,请使用:
printf("%x, %x", 0x0d, '\x0d');
如果你想在它前面加一个反斜杠,你必须转义反斜杠,这样编译器就不会解释它:
printf("\\x%x", 0x0d);
printf("\n\\x41\n");
要打印转义的字符,请使用%c
格式说明符:
printf("%c", (int)strtol(tmp, NULL, 16));