linux c++中string和wstring互转

2021-01-21  本文已影响0人  一路向后

1.源码实现

#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <wchar.h>
#include <locale.h>

using namespace std;

int ws2s(const wstring &ws, string &r)
{
    const wchar_t *source = ws.c_str();
    char *dest = NULL;
    int len = 0;
    int ret = 0;

    len = wcslen(source) + 1;

    if(len <= 1)
        return 0;

    dest = new char[len*sizeof(wchar_t)];

    ret = wcstombs(dest, source, len*sizeof(wchar_t));

    r = string(dest);

    delete[] dest;

    return ret;
}

int s2ws(const string &s, wstring &r)
{
    const char *source = s.c_str();
    wchar_t *dest = NULL;
    int len = 0;
    int ret = 0;

    len = strlen(source) + 1;

    if(len <= 1)
        return 0;

    dest = new wchar_t[len];

    ret = mbstowcs(dest, source, len);

    r = wstring(dest);

    delete[] dest;

    return ret;
}

int main()
{
    string a("你好,世界");
    wstring b;
    string c;

    setlocale(LC_CTYPE, "zh_CN.utf8");

    s2ws(a, b);
    ws2s(b, c);

    cout << c << endl;

    return 0;
}

2.编译源码

$ g++ -o example example.cpp

3.运行及其结果

$ ./example
你好,世界
上一篇 下一篇

猜你喜欢

热点阅读