當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] WindowsCE下Unicode和Ansi字符間互相轉(zhuǎn)換的例子縱所周知,WindowsCE下編程99%的問題都和Unicode有關(guān).比如文件編輯,一般都保存為Ansi格式;無線通訊中控制Modem需要發(fā)送的AT指

 WindowsCE下Unicode和Ansi字符間互相轉(zhuǎn)換的例子

縱所周知,WindowsCE下編程99%的問題都和Unicode有關(guān).比如文件編輯,一般都保存為Ansi格式;無線通訊中控制Modem需要發(fā)送的AT指令,必須是Ansi格式;網(wǎng)絡(luò)通訊中,PC端一般都是Ansi的,為了和PC上協(xié)議兼容,在WindowsCE中必須把要發(fā)送的一個指令從Unicode 轉(zhuǎn)換成Ansi格式...等等.很多初學(xué)者對于這些問題總是感到很麻煩.其實WindowsCE中有標(biāo)準(zhǔn)的API實現(xiàn)了Unicode和Ansi字符間的互轉(zhuǎn).下面就是網(wǎng)絡(luò)通訊中的程序片斷.

m_psocket是指向一個從CCeSocket派生的類,如果沒有連接的話其為NULL;

m_snd是要發(fā)送的CString,和一個EDIT相對應(yīng).

//發(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ù)制要發(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é)

//缺省的字符:"