任何人都可以告诉我这是什么意思

时间:2011-06-22 18:13:05

标签: c++ c

这是一个非常基本的疑问,但请澄清我

#define TLVTAG_APPLICATIONMESSAGE_V             "\xDF01"
printf("%s\n", TLVTAG_APPLICATIONMESSAGE_V);

表示将要打印的内容。

2 个答案:

答案 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_twprintf会打印出整个wchar_t

答案 1 :(得分:4)

似乎有人试图打印unicode character - >