2009-11-30 48 views
1

我正在開發Windows CE下的MFC程序。它默認是unicode。我可以使用TRACE打印這樣的消息如何使用unicode MFC環境下的ascii使用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將它們打印出來,我該怎麼辦?

謝謝。

回答

3

使用"%hs"來格式化窄字符串參數,前提是您不關心代碼頁。有關格式說明符的說明,請參閱this page

0

只要檢索到的文本在0-127範圍內真正爲ASCII,並且Unicode編碼爲UTF-8,它就應該可以工作。 Unicode採用較低的ASCII範圍,使用相同的代碼點。

1

在Windows中,「%S」格式說明符(大寫'S')將格式化與構建的「相反」的字符串。在UNICODE構建它會期望一個ANSI/MBCS字符串,並在非UNICODE構建它會期望一個UNICODE參數。

我不是100%肯定這將在CE工作,但桌面上的以下工作(對於Unicode版本):

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