嵌入開(kāi)發(fā)(WinCE)的一些經(jīng)驗(yàn)
WindowsCE下Unicode和Ansi字符間互相轉(zhuǎn)換的例子
縱所周知,WindowsCE下編程99%的問(wèn)題都和Unicode有關(guān).比如文件編輯,一般都保存為Ansi格式;無(wú)線通訊中控制Modem需要發(fā)送的AT指令,必須是Ansi格式;網(wǎng)絡(luò)通訊中,PC端一般都是Ansi的,為了和PC上協(xié)議兼容,在WindowsCE中必須把要發(fā)送的一個(gè)指令從Unicode 轉(zhuǎn)換成Ansi格式...等等.很多初學(xué)者對(duì)于這些問(wèn)題總是感到很麻煩.其實(shí)WindowsCE中有標(biāo)準(zhǔn)的API實(shí)現(xiàn)了Unicode和Ansi字符間的互轉(zhuǎn).下面就是網(wǎng)絡(luò)通訊中的程序片斷.
m_psocket是指向一個(gè)從CCeSocket派生的類,如果沒(méi)有連接的話其為NULL;
m_snd是要發(fā)送的CString,和一個(gè)EDIT相對(duì)應(yīng).
/發(fā)送函數(shù)片斷
void CClient1Dlg::OnButtonSend()
{
/ TODO: Add your control notification handler code here
if (!m_psocket) /無(wú)Socket連接,退出
{
MessageBox(TEXT("無(wú)連接!"),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( /計(jì)算從Unicode轉(zhuǎn)換到Ansi后需要的字節(jié)數(shù)
CP_ACP, /根據(jù)ANSI code page轉(zhuǎn)換
WC_COMPOSITECHECK | WC_DEFAULTCHAR, /轉(zhuǎn)換出錯(cuò)用缺省字符代替
tmpstr.GetBuffer(m_snd.GetLength()), /要轉(zhuǎn)換的字符串地址
m_snd.GetLength(), /要轉(zhuǎn)換的個(gè)數(shù)
0, /轉(zhuǎn)換后字符串放置的地址
0, /最多轉(zhuǎn)換字符的個(gè)數(shù),為0表示返回轉(zhuǎn)換Unicode后需要多少個(gè)字節(jié)
0, /缺省的字符:"