memcpy复制的时候,发生高字节和低字节相互交换的问题我用memcpy来复制汉字,结果得到不是原来的汉字,而是这个汉字的高字节跟低字节相互交换的其他字。这是怎么回事?
使用汉字碰到很多意想不到的问题,汉字编程真的很难,现在还不能够使用unicode。

解决方案 »

  1.   

    LPTSTR danzifufuzimove(WCHAR *lpzifu,LPTSTR lpstrtemp)
    {
    TCHAR zifutemp = 0;// if (isleadbyte(lpstrtemp[0]))
    if (IsDBCSLeadByte(lpstrtemp[0]))
    {
    memcpy(lpzifu,lpstrtemp,2);
    }
    else
    {
    zifutemp = *lpstrtemp;
    *lpzifu = (WCHAR)zifutemp;
    // _tcsncpy(lpzifu,lpstrtemp,1);
    }
    // CharPrev(lpzifu,lpstrtemp);
    lpstrtemp = CharNext(lpstrtemp);
    return lpstrtemp;
    }
      

  2.   

    Return Values
    If the byte is potentially a lead byte, it returns a nonzero value.If the byte is not a lead byte, the return value is zero. To get extended error information, call GetLastError. -------------------------------------
    如果这个函数说某个字节不是双字节的第一个字节,那么一定不是。如果这个函数说是第一个字节,那么有可能是。
      

  3.   

    LPTSTR danzifufuzimove(WCHAR *lpzifu,LPTSTR lpstrtemp)
    {
    TCHAR zifutemp = 0;

    // if (isleadbyte(lpstrtemp[0]))
    if (IsDBCSLeadByte(lpstrtemp[0])) //判断是不是第一个字节
    {
    memcpy(lpzifu,lpstrtemp,2);
    }
    else
    {
    zifutemp = *lpstrtemp;
    *lpzifu = (WCHAR)zifutemp;
    // _tcsncpy(lpzifu,lpstrtemp,1);
    }
    // CharPrev(lpzifu,lpstrtemp);
    lpstrtemp = CharNext(lpstrtemp);
    return lpstrtemp;
    }//我感觉这个函数的参数写的有问题,如果在unicode下LPTSTR也是WCHAR *,这就无法区分了。
    //所以函数的正确写法应该是
    char *
    danzifufuzimove(WCHAR *lpzifu, char* lpstrtemp)
    {
    TCHAR zifutemp = 0;

    // if (isleadbyte(lpstrtemp[0]))
    if (IsDBCSLeadByte(lpstrtemp[0])) //判断是不是第一个字节
    {
    memcpy(lpzifu,lpstrtemp,2);
    }
    else
    {
    zifutemp = *lpstrtemp;
    *lpzifu = (WCHAR)zifutemp;
    // _tcsncpy(lpzifu,lpstrtemp,1);
    }
    // CharPrev(lpzifu,lpstrtemp);
    lpstrtemp = CharNext(lpstrtemp);
    return lpstrtemp;
    }//如果lpstrtemp中存放的是0xa0, 0xb0, 0xc0, 0xd0。
    //如果直接memcpy的话,lpzifu中存放的应该是0xb0a0, 0xd0c0.
      

  4.   

    WCHAR 实际是short,由于字节序的问题当然会高低位互换了
    既然不是unicode那么根本就不用WCAHR,都用char*就行
      

  5.   

    一句话道破天机,原来是WCHAR的时候,就是高字节和低字节都已经互换了,怪不得程序的奇怪错误那么多,那么,我还怎么使用双字节的字符啊,没有比WCHAR的更好用的呢??让他们还是跟字符串的高字节和低字节保持一直的位置呢?
      

  6.   

    不麻烦啊,用可以unsigned short也就是WCHAR来存储,要显示的时候,强制转换成char数组就能正确显示了