嵌入開發(fā)(WinCE)的一些經(jīng)驗
WindowsCE下Unicode和Ansi字符間互相轉(zhuǎn)換的例子
縱所周知,WindowsCE下編程99%的問題都和Unicode有關(guān).比如文件編輯,一般都保存為Ansi格式;無線通訊中控制Modem需要發(fā)送的AT指令,必須是Ansi格式;網(wǎng)絡通訊中,PC端一般都是Ansi的,為了和PC上協(xié)議兼容,在WindowsCE中必須把要發(fā)送的一個指令從Unicode 轉(zhuǎn)換成Ansi格式...等等.很多初學者對于這些問題總是感到很麻煩.其實WindowsCE中有標準的API實現(xiàn)了Unicode和Ansi字符間的互轉(zhuǎn).下面就是網(wǎng)絡通訊中的程序片斷.
m_psocket是指向一個從CCeSocket派生的類,如果沒有連接的話其為NULL;
m_snd是要發(fā)送的CString,和一個EDIT相對應.
//發(fā)送函數(shù)片斷
void CClient1Dlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
if (!m_psocket) //無Socket連接,退出
{
MessageBox(TEXT("無連接!"),TEXT("信息"));
return;
}
UpdateData(TRUE); //保存輸入的字符串到m_snd
unsigned char buf[129]; //發(fā)送緩沖區(qū)
ZeroMemory(buf,sizeof(buf)); //緩沖區(qū)清零
CString tmpstr(m_snd); //復制要發(fā)送的字符串
int multibytelen=WideCharToMultiByte( //計算從Unicode轉(zhuǎn)換到Ansi后需要的字節(jié)數(shù)
CP_ACP, //根據(jù)ANSI code page轉(zhuǎn)換
WC_COMPOSITECHECK | WC_DEFAULTCHAR, //轉(zhuǎn)換出錯用缺省字符代替
tmpstr.GetBuffer(m_snd.GetLength()), //要轉(zhuǎn)換的字符串地址
m_snd.GetLength(), //要轉(zhuǎn)換的個數(shù)
//轉(zhuǎn)換后字符串放置的地址
//最多轉(zhuǎn)換字符的個數(shù),為0表示返回轉(zhuǎn)換Unicode后需要多少個字節(jié)
//缺省的字符:"