2013年5月24日 星期五

VC++ 改變WCHAR其中的1 BYTE

上代碼
自己Try出來可以這樣轉換,也沒這樣寫過(pszBuf + i)[0]這類的用法,
紀錄一下;以免忘記,
此代碼可直接傳WCHAR* 的值測就會用了。


void ChangeWByte(WCHAR *pszBuf)
{
 WCHAR *pszChar;
 pszChar = _T(" ");
 int nLength = wcslen(pszBuf);

 for(int i = 0; i < nLength; i++)
 {
  // (pszBuf + i)該位置取2 bytes的字 
  // 去找是不是空白 -> 0x20 0x00
  if((pszBuf + i)[0] == pszChar[0])  
  {
   //可以這樣強制轉換WCHAR* -> BYTE* 
   // 變成一次取代一個BYTE的HEX值。
   memset((BYTE*)(pszBuf+ i), 0x21, 1);

   //亦可以強制轉換,直接給值。 
   //但[索引值] 需要當作轉換後的BYTE的索引值,故i要乘2.
   ((BYTE*)pszBuf)[(i*2)+1] = (BYTE)0x07; 
  }
 }
 //最後把值利用Format給CString變數,
 //傳進來的pszBuf其實已經被改變。 主要是有需要可以給其他成員變數。
 //另註解有CString轉WCHAR的方法。
 //先強制轉換CString -> LPCTSTR 才能在強制轉換成 WCHAR*
 // CString strBuffer;
 // WCHAR *pszBuf ;
 // pszBuf = (WCHAR*)(LPCTSTR)strBuffer;

 CString strDest;  
 strDest.Format( _T("%s"), pszBuf);
}

沒有留言:

張貼留言