代码之家  ›  专栏  ›  技术社区  ›  user66222

用WideCharToMultiByte转换LPCWSTR。需要帮助

  •  0
  • user66222  · 技术社区  · 17 年前

    我有一个这样的函数:

    BOOL WINAPI MyFunction(HDC hdc, LPCWSTR text, UINT cbCount){
    
    char AnsiBuffer[255];
    int written = WideCharToMultiByte(CP_ACP, 0, text, cbCount, AnsiBuffer , 0, NULL, NULL);
    if(written > -1) AnsiBuffer[written] = '\0';
    
    if(written>0){
    
        ofstream myfile;
        myfile.open ("C:\\example.txt", ios::app);
        myfile.write(AnsiBuffer, sizeof(AnsiBuffer));
        myfile.write("\n", 1);
        myfile.close();
    
    }
    
    
    ....
    

    当我使用MessageBoxW()显示输入的LPCWSTR文本时,文本显示良好。当我尝试将其转换为多字节时,返回值看起来很正常(例如:22、45等),但结果是乱码字符串(ex)。建议?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Andrew Grant    17 年前

    我看到两个问题;

    2) 在file.write sizeof(AnsiBuffer)中,无论缓冲区中有什么,都会写入255个字节。sizeof是一个编译时计算,返回变量的大小。您应该将其替换为表示字符串长度的“writed”变量。

        2
  •  1
  •   zildjohn01    17 年前

    0 0 ,函数返回所需长度的缓冲区,但不写入缓冲区。您将看到未初始化数组的结果。

    255 在正确的地方:

    int written = WideCharToMultiByte(CP_ACP, 0, text, cbCount, AnsiBuffer , 255, NULL, NULL);