我在C中使用了一个sprintf函数,我用这种方式创建了第一个工作程序:
sprintf((char*)(command),"\"\x1F\"\r");
字符串
这是正常工作的,因为它为这个特定的十六进制值0x 1F打印了相应的ASCII字符。
下一点是,我想做同样的事情,但有一个变量:
sprintf((char*)(command),"\"\\x%x\"\r",var);
型
我尝试了不同的方式,但没有工作。
预期的输出是这样的“u}”对应于ASCII转换后的十六进制值”如果我使用变量,我只得到1F打印。
有什么建议吗?
2条答案
按热度按时间e3bfsja21#
所以如果我理解正确的话,你有一个“ASCII值”(例如0x1F),你从一些输入源(比如用户)获得,并希望显示这个值(或者更确切地说,对应的ASCII字符)。
字符串
转换格式说明符
%c
需要一个char
类型的参数,并将只显示该字符(因此不是“1F”,而是不可打印的“单位分隔符”)。当然,对于
char
值,你并不真正需要这个..因为char var = 0x1F
* 已经是你想要的“ASCII字符”了。为了进一步说明这一点:型
这将输出“相同”。(https://ideone.com/3pr51b)
mitkmikd2#
转义序列
\x
的处理不是由sprintf()
完成的,而是由编译器在将字符串转换为数据时完成的。所以当你写"\"\x1F\""
时,字符串实际上包含一个代码为0x1f
的字节。因此,使用
\\x
产生的文字\x
化字符串不会导致它被视为转义序列。如果要将字节值放入结果中,请使用
%c
字符串