欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于WinCE下通訊亂碼及unicode轉換收藏
http://blog.163.com/net-chong/blog/static/310471802009134211228/
 
2009-02-03 16:21:01
 
   WinCE和WinNT一樣,是UNICODE環(huán)境,盡管WinCE支持ASCII功能來(lái)進(jìn)行文件交換,但是WinCE的本地文件格式是Unicode。所以,我們要將字符串轉換為unicode才能使用。
        在系統定義了_UNICODE 宏時(shí),_T和TEXT宏都可以將一個(gè)ansi字符轉換為一個(gè)寬字符的unicode字符。WideCharToMultiByte是將Unicode字符串轉換為ASCII字符串,MultiByteToWideChar則相反。當WinCE和pc通信時(shí),由于PC使用ASCII字符串在網(wǎng)絡(luò )上傳輸,所以當Wince接收到內容時(shí)要轉換為Unicode才能使用,而發(fā)送內容時(shí),要轉換為ASCII字符才能發(fā)送。那么如何判斷轉化后的字符大小呢?只要將這兩個(gè)函數中的轉換后的大小設為0,那么函數就會(huì )返回轉換后的實(shí)際大小,然后利用這個(gè)返回值再調用這兩個(gè)函數就可以實(shí)現轉換了。WinCE還提供了幾種專(zhuān)門(mén)用于Unicode字符的數據類(lèi)型,如WCHAR,LPWSTR,LPCWSTR,對于A(yíng)NSI字符函數如strcpy,strcmp等,WinCE提供了 wcscpy,wcscmp等于之對應。
         縱所周知,WindowsCE下編程99%的問(wèn)題都和Unicode有關(guān).比如文件編輯,一般都保存為Ansi格式;無(wú)線(xiàn)通訊中控制Modem需要發(fā)送的 AT指令,必須是Ansi格式;網(wǎng)絡(luò )通訊中,PC端一般都是Ansi的,為了和PC上協(xié)議兼容,在WindowsCE中必須把要發(fā)送的一個(gè)指令從 Unicode 轉換成Ansi格式...等等.很多初學(xué)者對于這些問(wèn)題總是感到很麻煩.其實(shí)WindowsCE中有標準的API實(shí)現了Unicode和Ansi字符間的互轉.

       在實(shí)際測試UDP接收過(guò)程中發(fā)現,可以通過(guò)兩種方式:

      1。通過(guò)CString str=buf,CString內部即可完成轉換。

      2。通過(guò)MultiByteToWideChar

DWORD dwNum = MultiByteToWideChar (CP_ACP, MB_COMPOSITE, (char*)buf, -1, NULL, 0);
 
  wchar_t *pwText;
  pwText = new wchar_t[dwNum];
  if(!pwText)
  {
   delete []pwText;
  }

  MultiByteToWideChar(CP_ACP,MB_COMPOSITE,(char*)buf,-1,pwText,dwNum);
  
  ::MessageBox(NULL,pwText,_T("Recvd:"),MB_OK);

delete []pwText;

//////////////////////////////////////////////////////////////////////////////////////////例子/////////////////////////////////////////////////

//發(fā)送函數片斷
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ā)送緩沖區
  ZeroMemory(buf,sizeof(buf)); //緩沖區清零
  CString tmpstr(m_snd); //復制要發(fā)送的字符串
  int multibytelen=WideCharToMultiByte( //計算從Unicode轉換到Ansi后需要的字節數
  CP_ACP, //根據ANSI code page轉換
  WC_COMPOSITECHECK | WC_DEFAULTCHAR, //轉換出錯用缺省字符代替
  tmpstr.GetBuffer(m_snd.GetLength()), //要轉換的字符串地址
      m_snd.GetLength(), //要轉換的個(gè)數
      0, //轉換后字符串放置的地址
      0, //最多轉換字符的個(gè)數,為0表示返回轉換Unicode后需要多少個(gè)字節
      0, //缺省的字符:"\0"
      0 //缺省的設置
    );
  WideCharToMultiByte( //轉換Unicode到Ansi
      CP_ACP,
      WC_COMPOSITECHECK | WC_DEFAULTCHAR,
      tmpstr.GetBuffer(m_snd.GetLength()),
      m_snd.GetLength(),
      (char *)buf, //轉換到緩沖區中
      128, //最多128個(gè)字節
      0,
      0
    );
  int sendcount=m_psocket->Send(buf,multibytelen+1); //發(fā)送轉換后的緩沖區
  CString statusstr;
  statusstr.Format(TEXT("共發(fā)送字節數:%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個(gè)字節
  int widecharlen=MultiByteToWideChar( //計算從Ansi轉換到Unicode后需要的字節數
      CP_ACP,
      MB_COMPOSITE,
      (char*)p, //要轉換的Ansi字符串
      -1, //自動(dòng)計算長(cháng)度
      0,
      0
  );
  CString tmpstr;
  tmpstr.GetBuffer(widecharlen); //為轉換后保存Unicode字符串分配內存
  MultiByteToWideChar( //從Ansi轉換到Unicode字符
      CP_ACP,
      MB_COMPOSITE,
      (char*)p,
      -1,
      tmpstr.GetBuffer(widecharlen), //轉換到tmpstr
      widecharlen //最多轉換widecharlen個(gè)Unicode字符
  );
  m_clientdlg->m_listbox.InsertString(0,tmpstr); //插入到listbox中顯示
  CCeSocket::OnReceive(nErrorCode);
}
 
 
(#)
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Unicode下CString(wchar_t)轉換為 char*
VS2010中文編碼問(wèn)題
MFC獲取字符串長(cháng)度的5中方法
MultiByteToWideChar和WideCharToMultiByte用法詳解
WinCE下的非常用字符串操作函數
VFP轉換文本文件的編碼格式(字符集)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久