这是一个非常基本的疑问,但请澄清我
#define TLVTAG_APPLICATIONMESSAGE_V "\xDF01"
printf("%s\n", TLVTAG_APPLICATIONMESSAGE_V);
表示将要打印的内容。
答案 0 :(得分:6)
逐步进行(使用C ++标准,2.13.2和2.13.4作为参考):
#define
表示您在第一个出现的地方替换第二个内容,因此printf
将被处理为printf("%s\n", "\xDF01");
。
"\xDF01"
是一个字符串(加上零字节终结符),\x
表示将下一个字符作为十六进制值,因此它会尝试将DF01视为以十六进制表示的数字,并将其放入char
。
由于标准引用字符串包含char
s,而不是wchar_t
s,并且您几乎肯定使用8位char
,因此结果是实现定义的,并且如果没有实施文档,就不可能进一步推测。
现在,如果字符串是L"\xDF01"
,它的元素将是wchar_t
s,它们是宽字符,通常是16或32位,DF01值将变为一个字符(可能是Unicode)值,并且print语句将打印字符\ xDF和characters \ x01,不一定按顺序排列,因为printf
打印char
,而不是wchar_t
。 wprintf
会打印出整个wchar_t
。
答案 1 :(得分:4)
似乎有人试图打印unicode character - >