WindowsCE下Unicode和Ansi字元間互相轉換的例子 (轉)
縱所周知,CE下99%的問題都和Unicode有關.比如編輯,一般都儲存為Ansi格式;通訊中控制Modem需要傳送的AT指令,必須是Ansi格式;通訊中,PC端一般都是Ansi的,為了和PC上相容,在WindowsCE中必須把要傳送的一個指令從Unicode轉換成Ansi格式...等等.很多初學者對於這些問題總是感到很麻煩.其實WindowsCE中有標準的實現了Unicode和Ansi字元間的互轉.下面就是網路通訊中的片斷.
m_psocket是指向一個從CCeSocket派生的類,如果沒有連線的話其為NULL;
m_snd是要傳送的CString,和一個EDIT相對應.
//傳送片斷
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]; //傳送緩衝區
ZeroMemory(buf,sizeof(buf)); //緩衝區清零
CString tmpstr(m_snd); //複製要傳送的字串
int multibytelen=WCharToMultiByte( //計算從Unicode轉換到Ansi後需要的位元組數
CP_ACP, //根據ANSI code page轉換
WC_COMPOSITECHECK | WC_DEFAULTCHAR, //轉換出錯用預設字元代替
tmpstr.GetBuffer(m_snd.GetLength()), //要轉換的字串地址
m_snd.GetLength(), //要轉換的個數
0, //轉換後字串放置的地址
0, //最多轉換字元的個數,為0表示返回轉換Unicode後需要多少個位元組
0, //預設的字元:""
0 //預設的設定
);
WideCharToMultiByte( //轉換Unicode到Ansi
CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
tmpstr.GetBuffer(m_snd.GetLength()),
m_snd.GetLength(),
(char *)buf, //轉換到緩衝區中
128, //最多128個位元組
0,
0
);
int sendcount=m_psocket->Send(buf,multibytelen+1); //傳送轉換後的緩衝區
CString statusstr;
statusstr.Format(TEXT("共傳送位元組數:%d"),sendcount);
m_status.SetWindowText(statusstr); //顯示欄
}
程式接收到的字串最後儲存到CString tmpstr中.
//接收函式片斷
void MyCeSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
unsigned char p[129]; //接受緩衝區
ZeroMemory(p,sizeof(p)); //接收緩衝區清零
this->Receive(p,128); //接收128個位元組
int widecharlen=MultiByteToWideChar( //計算從Ansi轉換到Unicode後需要的位元組數
CP_ACP,
MB_COMPOSITE,
(char*)p, //要轉換的Ansi字串
-1, //自動計算長度
0,
0
);
CString tmpstr;
tmpstr.GetBuffer(widecharlen); //為轉換後儲存Unicode字串分配
MultiByteToWideChar( //從Ansi轉換到Unicode字元
CP_ACP,
MB_COMPOSITE,
(char*)p,
-1,
tmpstr.GetBuffer(widecharlen), //轉換到tmpstr
widecharlen //最多轉換widecharlen個Unicode字元
);
m_clientdlg->m_listbox.InsertString(0,tmpstr); //插入到listbox中顯示
CCeSocket::OnReceive(nErrorCode);
}
注意:以上程式碼都是在WindowsCE樣板機上執行,PC端傳送和接收到的字元均為Ansi格式的.把以上程式碼稍微修改一下用到自己的產品中,就可以利用以前的協議無縫連線PDA和PC.
以上程式碼在 Embed Visual C++ 3.0 + 聯想天璣5100(WindowsCE3.0)
+ Eagle Tec 10M CF卡透過.
.Feb.18th,5:25PM,Roving in ShenZhen...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993270/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 字串: 怎樣在ANSI 和 UNICODE間做轉換 (轉)字串Unicode
- VB中的Unicode 和 Ansi 格式 (轉)Unicode
- Java 經典例項: Unicode字元和String之間的轉換JavaUnicode字元
- js資料型別間的互相轉換JS資料型別
- DataSet與泛型集合間的互相轉換泛型
- Unicode和UTF-8之間的轉換詳解Unicode
- C++ string互轉wstring/Unicode互轉ANSI/Unicode互轉UTF8C++Unicode
- MySQL中日期和時間戳互相轉換的函式和方法MySql時間戳函式
- ANSI與UTF8之間的轉換!std::string與UTF8之間的轉換
- mysql時間和日期轉換的一些例子MySql
- jquery物件和DOM物件的互相轉換jQuery物件
- Java Stram實現Map和字串之間互相轉換| BaeldungJava字串
- c++中字元、字串和數字間的轉換C++字元字串
- 中文轉換成unicode字元,實現國際化Unicode字元
- []byte轉和[][]string可以互相轉換嗎??
- 【JQuery】DOM物件和JQuery物件的互相轉換jQuery物件
- 圖解Excel與Html格式之間的互相轉換圖解ExcelHTML
- python中列表、字典和字串的互相轉換Python字串
- 字串 列表 字典 互相轉換字串
- C# bytes[]和sting互相轉換C#
- 字元編解碼的故事(ASCII,ANSI,Unicode,Utf-8區別)字元ASCIIUnicode
- python實現中文和unicode轉換PythonUnicode
- nodejs字元與位元組之間的轉換NodeJS字元
- float與byte[]互相轉換
- 多位元組與UTF-8、Unicode之間的轉換Unicode
- png轉jpg,常用格式怎麼互相轉換
- 字元型別轉換成時間型別字元型別
- javascript 字元轉換為ascii碼,ascii碼轉換為字元JavaScript字元ASCII
- ABAP和XML資料格式互相轉換的兩種方式XML
- Java 實現 Map 和 Object 互相轉換的幾種方法JavaObject
- 行列轉換的一個例子
- 從 unicode 到位元組的轉換Unicode
- php 的字元編碼轉換工具 (轉)PHP字元
- unicode、utf-8、ansi的故事Unicode
- 時間戳與yyyy-mm-dd hh:mm:ss格式之間的互相轉換時間戳
- json字串與物件互相轉換JSON字串物件
- Java 集合與陣列互相轉換Java陣列
- GPT與MBR格式 以及互相轉換GPT