【问题标题】:Can anyone tell me what does this mean谁能告诉我这是什么意思
【发布时间】:2011-06-22 18:13:05
【问题描述】:

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

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

表示将要打印的内容。

【问题讨论】:

标签: c++ c


【解决方案1】:

一步一步来(使用 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_twprintf 将打印出整个 wchar_t

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 有人想以最糟糕的方式打印 Unicode 字符。