将字符串转换为wstring后为空输出,反之亦然

时间:2015-03-04 09:49:10

标签: c++ non-ascii-characters

asciistringForlì

并使用以下循环

string s = "Forlì";
for(size_t i = 0; i < s.size(); i++) {
    printf("% d", s[i]);
}

wstring s = L"Forlì";

for(size_t i = 0; i < s.size(); i++) {
    printf("% d", s[i]);
}

这就是我得到的

70 111 114 108 -61 -84    //string
70 111 114 108 236        //wstring

现在我想在这些类型之间进行转换,而不更改上面打印的任何值(不是一些不同的编码)。由于我没有使用windows或c ++ 11,我发现以下例程给了我不满意的结果

std::wstring s2ws(const std::string& s) {
    const char* _Source = s.c_str();
    size_t _Dsize = mbstowcs(NULL, _Source, 0) + 1;
    wchar_t *_Dest = new wchar_t[_Dsize];
    wmemset(_Dest, 0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result = _Dest;
    delete []_Dest;
    return result;
}

std::wstring s2ws(const std::string& s) {
    wstring w;
    w.assign(s.begin(), s.end());
    return w;
}

当我使用第一个例程打印转换后的字符串时,它不会输出任何内容,而第二个例程不会将其转换为wstring(-61,-84不会更改为236)。

如何正确进行此转换?即使是没有任何库函数来操纵这些数字的算法也足够......

0 个答案:

没有答案