当前位置:首页 > 芯闻号 > 充电吧
[导读]例如,如下的输出:[Test]path is: \ResidentFlash\Music\MP3\竿 - 莶?.mp3[Test]path is: \ResidentFlash\Music\MP3\蓝

例如,如下的输出:

[Test]path is: ResidentFlashMusicMP3竿 - 莶?.mp3
[Test]path is: ResidentFlashMusicMP3蓝莲花-许巍.mp3

一般情况下,大家都是使用 RETAILMSG 直接输入 TCHAR 型的字符串的,这样的话在串口工具中看到的结果就会像第一行。怎么才能看到如第二行的输出呢?



char cName[MAX_PATH];
TCHAR *ptcTst = L"\ResidentFlash\Music\MP3\蓝莲花-许巍.mp3";		// 测试汉字通过串口工具输出

// 因为串口工具一般只支持 char 型字符串,而不是 Unicode 字符串。所以...
ZeroMemory(cName,sizeof(char) * MAX_PATH);
::WideCharToMultiByte(CP_ACP, 0, ptcTst, -1, cName, MAX_PATH, NULL, NULL);

RETAILMSG(1,(L"[Test]path is: %Srn",cName));
RETAILMSG(1,(L"[Test]path is: %srn",ptcTst));


使用以上两句输出,在串口调试工具,如: sscom32.exe 中的输出如上行所示。

在使用 VS2005/VS2008 等调试工具时,在 Output 窗口输出时,使用 RETAILMSG(1,(L"[Test]path is: %srn",ptcTst)); 可以看到汉字正确显示。
如果使用 RETAILMSG(1,(L"[Test]path is: %Srn",cName)); 则在 VS 工具的 Output 窗口中可能无法看到正确的显示。这时需要使用宏 _DEBUG 来区分实现两种情况,在 Debug/Release 下分别调用不同的实现。
如果无法使用 VS 调试功能,则 RETAILMSG(1,(L"[Test]path is: %Srn",cName)); 输出是一个很好的选择。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭