无论是用CFile、CStdioFile、fstream、FILE都行比如wstring ws = L"ABC的";
然后输出到文件要是这样:00000000h: 41 00 42 00 43 00 B5 C4                         ; A.B.C.的

解决方案 »

  1.   


    std::ofstream fout("C:\\......\\fff.txt", std::ios::binary); 
    wchar_t * buff=L"ABC的"; fout.write((const char*)buff, 8);  
    fout.close(); 我这样的结果是41 00 42 00 43 00 87 76
      

  2.   

    std::ofstream fout("C:\\......\\fff.txt", std::ios::binary);  
    CW2A cs(L"ABC找个地方很美");
    fout.write(cs.m_psz,strlen(cs.m_psz));
    std::ofstream fout("C:\\......\\fff.txt", std::ios::binary);    
      

  3.   

    请问你运行过没有?我这边用VC6编译不过,CW2A无法识别,m_psz也无法识别
      

  4.   

    请问你运行过没有?我这边用VC6编译不过,CW2A无法识别,m_psz也无法识别
    VB6没有这个对象,我是用 VS2008
      

  5.   


    不对哦哥们,这样的运行结果是:
    00000000h: 41 42 43 D5 D2 B8 F6 B5 D8 B7 BD BA DC C3 C0    ; ABC找个地方很美
    我希望是:
    00000000h: 41 00 42 00 43 00 D5 D2 B8 F6 B5 D8 B7 BD BA DC ; A.B.C.找个地方很
    00000010h: C3 C0                                           ; 美我就用你的代码,最后一行换成fout.close();
      

  6.   

    按着unicode文件的格式写二进制文件即可
    你看看这个http://www.programfan.com/blog/article.asp?id=31048
    写成 41 00 42 00 43 00这样就对了
    unicode本来就这样
      

  7.   


    不对哦哥们,这样的运行结果是:
    00000000h: 41 42 43 D5 D2 B8 F6 B5 D8 B7 BD BA DC C3 C0    ; ABC找个地方很美
    我希望是:
    00000000h: 41 00 42 00 43 00 D5 D2 B8 F6 B5 D8 B7 BD BA DC ; A.B.C.找个地方很
    00000010h: C3 C0                                           ; 美我就用你的代码,最后一行换成fout.close();
    哇擦,我还以为你要写ansi编码,那你干嘛转换啊?直接存,不可以吗?
      

  8.   

    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    wstring ws = L"ABC找个地方很美";
    try
    {
    CFile file(_T("E:\\11.txt"), CFile::modeCreate | CFile::modeWrite);
    wchar_t ch = L'\0'; CString strLine(_T(""));
    CString strData(_T(""));
    CString strText(_T(";"));
    CString strInfo(_T(""));
    CString strTemp(_T(""));
    int nIndex = 0;
    int nCount = 0;
    strLine.Format(_T("%08xh: "), 0);
    for(size_t i = 0; i != ws.size(); ++i)
    {
    ch = ws.at(i);
    strTemp.Format(_T("%02X %02X "), LOBYTE(ch), HIBYTE(ch));
    strData += strTemp;
    wchar_t szText[] = {ch, L'\0'};
    strText += CString(szText);
    if(0 == HIBYTE(ch))
    {
    strText += _T('.');
    }
    nCount += 2;
    if(0 == nCount % 16)
    {
    strInfo.Format(_T("%s%s%s"), strLine, strData, strText);
    file.Write(strInfo, _tcslen(strInfo) * sizeof(TCHAR)); strData.Empty();
    strText.Empty();
    strLine.Empty();
    nCount = 0;
    strText = _T(";");
    strLine.Format(_T("\r\n%08xh: "), nIndex * 16);
    ++nIndex;

    }
    strInfo.Format(_T("%s%s%s"), strLine, strData, strText);
    file.Write(strInfo, _tcslen(strInfo) * sizeof(TCHAR));
    file.Close();
    }
    catch (CException* e)
    {
    e->ReportError();
    e->Delete();
    }
    return 0;
    }
      

  9.   


    不对哦哥们,这样的运行结果是:
    00000000h: 41 42 43 D5 D2 B8 F6 B5 D8 B7 BD BA DC C3 C0    ; ABC找个地方很美
    我希望是:
    00000000h: 41 00 42 00 43 00 D5 D2 B8 F6 B5 D8 B7 BD BA DC ; A.B.C.找个地方很
    00000010h: C3 C0                                           ; 美我就用你的代码,最后一行换成fout.close();LZ你这个算是什么编码?ansi不是ansi Unicode又不是Unicode,两者混合?
    西文用Unicode,中文用ansi?
      

  10.   

    请问下W2A要包含什么头文件?
    #include <atlconv.h>
    在函数起始地方
    USES_CONVERSION;
      

  11.   

    对啊,为什么跟我预期的不一样按理说UNICODE的 “的”字编码就是87 76 吧
    你说的B5 C4是Ansi 的汉字"的"的编码 ,既然你用宽字符,那么就是这个样子,
    如果出现41 00 42 00 43 00 B5 C4,那么相当于前面三个字符用unicode,后一个字符用ansi,不合理阿
      

  12.   


    FILE* fp = _wfopen(L"c:\\1.txt", L"wt,ccs=unicode");
    fwprintf(fp, ws.c_str());
    fclose(fp);这么简单的问题搞这么复杂。
      

  13.   


    非常感谢你的解答,我按你的代码修改了下就能用了,但是这段代码在工程属性是Unicode的时候是我想要的:
    00000000h: 41 00 42 00 43 00 7E 62 2A 4E 30 57 B9 65 88 5F ; A.B.C.~b*N0W筫坃
    00000010h: 8E 7F 84 76                                     ; ?剉
    但是非Unicode下又变成了:
    00000000h: 41 42 43 D5 D2 B8 F6 B5 D8 B7 BD BA DC C3 C0 B5 ; ABC找个地方很美?
    00000010h: C4                                              ; 
    所以我想请问下,在工程建好之后,如何再把VC6和VS的工程属性分别改为Unicode?
    我看18楼的哥们是在代码中改的,这个办法就不依赖工程属性了,能不能从设置中改或者加宏定义的办法?
      

  14.   

    你好,非常感谢你的解答,请问一下
    1.你这样的写法是否默认会加一个文本文件头FF FE,这个可以不用去掉吧?貌似他不影响文件属性,只是增加了2字节的文件大小而已
    2.VC下不管用,只输出前面的字母,没有输出汉字,且字母不是双字节的是不是也要把VC的工程环境设成Unicode先?请问如何设置