我有一个软件可以读取文件并将其存储在 char* 数组中。其中有包含“\xhh”转义字符的子字符串。
这意味着该数字存储为“\xhh”字符串,其中“h”是数字,每个字符都是分隔的。即转义字符不存储为一个字符。
假设 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”结果。如何正确打印?
最佳答案
要将通常无法表示的字符放入 C 字符串中,可以将其作为十六进制转义字符放入,例如:
"A string with an \x0d"
编译器将字符串中的\x0d
替换为十六进制字符13,即回车符。这就是所有编译时间。
要将一个/任何字符打印为十六进制数字,请使用:
printf("%x, %x", 0x0d, '\x0d');
如果你想在它前面加上反斜杠,你必须转义反斜杠,这样编译器就不会解释它:
printf("\\x%x", 0x0d);
printf("\n\\x41\n");
要打印转义字符,请使用%c
格式说明符:
printf("%c", (int)strtol(tmp, NULL, 16));
关于c - 打印存储在 char 数组中的\x 转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49708648/