【问题标题】:How to use TRACE with ascii under unicode MFC environment?unicode MFC环境下如何使用TRACE和ascii?
【发布时间】:2010-12-21 13:27:54
【问题描述】:

我正在windows CE 下开发一个MFC 程序。默认情况下它是 unicode。我可以使用 TRACE 打印一些这样的消息

TRACE(TEXT("Hey! we got a problem!\n"));

如果一切都是 unicode,它就可以正常工作。但是,我得到了一些 ascii 字符串来打印。例如:

// open the serial port
m_Context = CreateFile(TEXT("COM1:"), ...);
int rc = ReadFile(m_Context, buffer, 1, cBytes, NULL);
// Oops!! We got a problem, because we can't print a non-unicode string
TRACE(TEXT("Read data: %s\n"), buffer);

我通过 com1 从 GPS 模块读取字符串。它发送这样的文本“$GPSGGA,1,2,3,4”。它们都用 ASCII 编码。我想用 TRACE 打印出来,怎么办?

谢谢。

【问题讨论】:

    标签: unicode mfc debugging ascii trace


    【解决方案1】:

    使用"%hs" 格式化窄字符串参数,前提是您不关心代码页。例如,请参阅this page 以了解格式说明符的说明。

    【讨论】:

      【解决方案2】:

      在 Windows 中,“%S”格式说明符(大写“S”)将格式化一个与构建“相反”的字符串。在 UNICODE 版本中,它需要一个 ANSI/MBCS 字符串,而在非 UNICODE 版本中,它需要一个 UNICODE 参数。

      我不能 100% 确定这是否适用于 CE,但以下适用于桌面(用于 UNICODE 构建):

      TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
      

      【讨论】:

        【解决方案3】:

        只要检索到的文本确实是 0-127 范围内的 ASCII,并且 Unicode 编码是 UTF-8,它就可以工作。 Unicode 采用了较低的 ASCII 范围,使用相同的代码点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2013-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-22
          • 2014-05-07
          相关资源
          最近更新 更多