存储在char数组

时间:2018-04-07 14:57:52

标签: c printing escaping

我有一个软件,它读取文件并将其存储在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”结果。我该如何正确打印?

1 个答案:

答案 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));
相关问题