一个Unicode文本文件中含三个字符,用WinHex查看其编码为:
(去掉了前面两个字节的格式字符)
61 00 51 01 62 00我现在有一个Byte类型的指针pBype指向上面的第一个字节(61),想取出中间那个Unicode字符该怎么取?我用这样的方法:
TCHAR ch=(TCHAR)*(pBype+2);但取出来的 ch 是字符 Q (51 00),而中间那个Unicode字符(51 01)应该是一个西欧字符。因为一些其它方面的限制,我必须通过pBype指针来取。谢谢解答!

解决方案 »

  1.   

    可能是
    TCHAR ch=(TCHAR)*(pBype[3]<<8 + pBype[2] );或者是。
    TCHAR ch=(TCHAR)*(pBype[2]<<8 + pBype[3] );
      

  2.   

    你的项目是Unicode的吗?
    把Unicode文本,保存到一个CString中转换到CString来处理#ifdef UNICODE
    CString strText(_T("ab我bc"));//保存了你的Unicode文本
    #else
    USES_CONVERSION;
    CString strTextA(_T("a我bc"));
    CStringW strText(A2W(strTextA));//保存了你的Unicode文本
    #endif
    //CString str = strText.Mid(1,1);//取得第2个字符
    BYTE *pBype = new BYTE[1000];
    memset(pBype,0,sizeof(pBype));
    memcpy(pBype,strText.GetBuffer(),strText.GetLength()*sizeof(WCHAR));
    strText.ReleaseBuffer(); BYTE *pBype1 =  pBype+2; WCHAR ch;
    memcpy(&ch,pBype1,sizeof(WCHAR)); delete [] pBype;
    pBype = NULL;
      

  3.   

    谢谢楼上两位解答。再补充说明以下几点:
    1.我上面只是举个例子,实际上我那个unicode文件很大,不能将文件内容全部保存到CString中。
    2.我的pBype是通过内存映射来获得的。
    3.我的项目是unicode项目。继续等待解答,谢谢!
      

  4.   

    知道了,自己说吧:TCHAR ch=*(TCHAR*)(pBype+2); 
      

  5.   

    TCHAR ch=(TCHAR)(*((TCHAR*)(pBype+2))); 
    或者
    TCHAR ch = *((TCHAR*)pByte + 1);