如题,注明编译器是用VC。

解决方案 »

  1.   

    举列说明一下,
     比"何“字:在X86机器(Little-endian),
     其机内码为:BACE;
     Unicode为:554F;
     请问如何转换!VC中函数不?没有函数的话,之间对应该关系统是怎么样?请知道朋友告知一下,问题解决,立马结贴。
      

  2.   

    /*
     * AnsiToUnicode converts the ANSI string pszA to a Unicode string
     * and returns the Unicode string through ppszW. Space for the
     * the converted string is allocated by AnsiToUnicode.
     */ HRESULT __fastcall AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW)
    {    ULONG cCharacters;
        DWORD dwError;    // If input is null then just return the same.
        if (NULL == pszA)
        {
            *ppszW = NULL;
            return NOERROR;
        }    // Determine number of wide characters to be allocated for the
        // Unicode string.
        cCharacters =  strlen(pszA)+1;    // Use of the OLE allocator is required if the resultant Unicode
        // string will be passed to another COM component and if that
        // component will free it. Otherwise you can use your own allocator.
        *ppszW = (LPOLESTR) CoTaskMemAlloc(cCharacters*2);
        if (NULL == *ppszW)
            return E_OUTOFMEMORY;    // Covert to Unicode.
        if (0 == MultiByteToWideChar(CP_ACP, 0, pszA, cCharacters,
                      *ppszW, cCharacters))
        {
            dwError = GetLastError();
            CoTaskMemFree(*ppszW);
            *ppszW = NULL;
            return HRESULT_FROM_WIN32(dwError);
        }    return NOERROR;
    /*
     * UnicodeToAnsi converts the Unicode string pszW to an ANSI string
     * and returns the ANSI string through ppszA. Space for the
     * the converted string is allocated by UnicodeToAnsi.
     */ HRESULT __fastcall UnicodeToAnsi(LPCOLESTR pszW, LPSTR* ppszA)
    {    ULONG cbAnsi, cCharacters;
        DWORD dwError;    // If input is null then just return the same.
        if (pszW == NULL)
        {
            *ppszA = NULL;
            return NOERROR;
        }    cCharacters = wcslen(pszW)+1;
        // Determine number of bytes to be allocated for ANSI string. An
        // ANSI string can have at most 2 bytes per character (for Double
        // Byte Character Strings.)
        cbAnsi = cCharacters*2;    // Use of the OLE allocator is not required because the resultant
        // ANSI  string will never be passed to another COM component. You
        // can use your own allocator.
        *ppszA = (LPSTR) CoTaskMemAlloc(cbAnsi);
        if (NULL == *ppszA)
            return E_OUTOFMEMORY;    // Convert to ANSI.
        if (0 == WideCharToMultiByte(CP_ACP, 0, pszW, cCharacters, *ppszA,
                      cbAnsi, NULL, NULL))
        {
            dwError = GetLastError();
            CoTaskMemFree(*ppszA);
            *ppszA = NULL;
            return HRESULT_FROM_WIN32(dwError);
        }
        return NOERROR;} 
    Sample use of these functions is as follows. CoTaskMemFree is used to free the converted string if CoTaskMemAlloc was used to allocate the string. The converted string must not be freed if it is returned through an out-parameter to another OLE component, because that component is responsible for freeing the string. LPOLESTR is a pointer to a Unicode string.
      

  3.   

    VC有函数
    MultiByteToWideChar()//ASC转Unicode
    WideCharToMultiByte()//Unicode转ASC