这是一个非常基本的疑问,但请澄清我
#define TLVTAG_APPLICATIONMESSAGE_V "\xDF01"
printf("%s\n", TLVTAG_APPLICATIONMESSAGE_V);
Run Code Online (Sandbox Code Playgroud)
意味着什么将被打印.
逐步进行(使用C++标准,2.13.2和2.13.4作为参考):
这#define意味着你在第一个出现的地方替换第二个东西,所以它printf被处理为printf("%s\n", "\xDF01");.
它"\xDF01"是一个字符串(加上零字节终结符),以及将\x下一个字符作为十六进制值的方法,因此它尝试将DF01视为十六进制数字,并将其拟合为一个char.
由于标准引用字符串包含chars而不是wchar_ts,并且您几乎肯定使用8位char,结果是实现定义的,如果没有实现文档,则实际上不可能进一步推测.
现在,如果字符串是L"\xDF01",它的元素将是wchar_ts,它们是宽字符,通常是16或32位,DF01值将变成一个字符(可能是Unicode)值,print语句将打印字符\ xDF和字符\ x01,不一定是那个顺序,因为printf打印char,不是wchar_t. wprintf会打印出整个wchar_t.