c - 打印存储在 char 数组中的\x 转义字符

标签 c printing escaping

我有一个软件可以读取文件并将其存储在 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/

相关文章:

c++ - 在 C++ 和 C 中的现有选项卡中打开 URL

ios - UIPrintInteractionController,关闭双面选项?

c - 内核模块使文件错误

c++ - 帮助连接大纲

c - Libcurl 问题 - "initializer element is not constant"

mysql - Nodejs MySQL : Query-Escaping adds single quotes

character-encoding - 转义字符实体有哪些策略?

delphi - 读写 DEVMODE.dmColor

javascript - 使用 javascript 打印隐藏在屏幕上的部分

javascript - 转义 Jade 中的文字