string和wstring互转、全角半角互转

string和wstring互转、全角半角互转

一.string和wstring互转

static std::string wstringTostring(const std::wstring& ws)

{

    std::string curLocale =setlocale(LC_ALL, NULL);

    setlocale(LC_ALL,"chs");

    const wchar_t* _Source =ws.c_str();

    size_t _Dsize = 2 *ws.size()+2;

    char *_Dest = newchar[_Dsize];

    memset(_Dest,0,_Dsize);

   wcstombs(_Dest,_Source,_Dsize);

    std::string result =_Dest;

    if(_Dest)

    {

        delete []_Dest;

        _Dest = NULL;

    }

    setlocale(LC_ALL,curLocale.c_str());

 

    return result;

}

 

static std::wstring stringTowstring(string& str)

{

    std::string curLocal =setlocale(LC_ALL, NULL);

    setlocale(LC_ALL,"chs");

    const char* _Source  = str.c_str();

    size_t _Dsize =2*str.size() + 2;

    wchar_t *_Dest = newwchar_t[_Dsize];

    memset(_Dest, 0x0,_Dsize);

    mbstowcs(_Dest, _Source,_Dsize);

    std::wstring result =_Dest;

    if(_Dest)

    {

        delete []_Dest;

        _Dest = NULL;

    }

    setlocale(LC_ALL,curLocal.c_str());

 

    return result;

}

 

二.宽字符全角半角互转

//UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,

//根据不同的符号而变化字节长度。

using namespace std;

std::wstring FullToHalf(std::wstring str)

{

    const int nStrLen =str.size() + 2;

 

    wchar_tinputWchar[nStrLen];

    memset(inputWchar, 0x0,sizeof(wchar_t)*nStrLen);

    memcpy(inputWchar,str.c_str(), sizeof(wchar_t)*nStrLen);

 

    for(int i = 0; i <nStrLen; i++)

    {

        if (inputWchar[i]>= 0xff01 && inputWchar[i] <= 0xff7e)

        {

            inputWchar[i] -=65248;

        }

        else if (inputWchar[i]== 12288)

        {

            inputWchar[i] = '';

        }

        else if (inputWchar[i]>= 0x00a4 && inputWchar[i] <= 0x3017)

        {

            inputWchar[i] = '';

        }

    }

 

    wstring halfString;

   halfString.resize(nStrLen);

    halfString = inputWchar;

 

    return halfString;

}

std::wstring HalfToFull(std::wstring str)

{

    const int nStrLen =str.size() + 2;

 

    wchar_tinputWchar[nStrLen];

    memset(inputWchar, 0x0,sizeof(wchar_t)*nStrLen);

    memcpy(inputWchar,str.c_str(), sizeof(wchar_t)*nStrLen);

 

    for(int i = 0; i <nStrLen; i++)

    {

        if (inputWchar[i]>= 0x0021 && inputWchar[i] <= 0x009e)

        {

            inputWchar[i] +=65248;

        }

        else if (inputWchar[i]== 32)

        {

            inputWchar[i] =12288;

        }

    }

 

    wstring fullString;

   fullString.resize(nStrLen);

    fullString = inputWchar;

 

    return fullString;

}

 

三.测试

    wstring half = L"中国1";//UTF8-half

    wstring full = L"中国1";//UTF8-full

    string strTemp = "中1国";

 

    wstring conhalf = FullToHalf(full);

    wstring confull =HalfToFull(half);

 

    wstring wstringTemp =stringTowstring(strTemp);

    string stringTemp =wstringTostring(wstringTemp);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中,你可以使用 `std::wstring_convert` 或者 `std::wstringstream` 来实现 `std::string` 和 `std::wstring` 之间的互相转换。以下是两种方法的示例代码: **方法一:使用 std::wstring_convert** ```cpp #include <iostream> #include <locale> #include <codecvt> std::wstring StringToWString(const std::string& str) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.from_bytes(str); } std::string WStringToString(const std::wstring& wstr) { std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; return converter.to_bytes(wstr); } int main() { std::string utf8Str = "Hello, 世界!"; std::wstring wideStr = StringToWString(utf8Str); std::cout << "Wide string: " << wideStr << std::endl; std::wstring wideStr2 = L"你好,世界!"; std::string utf8Str2 = WStringToString(wideStr2); std::cout << "UTF-8 string: " << utf8Str2 << std::endl; return 0; } ``` **方法二:使用 std::wstringstream** ```cpp #include <iostream> #include <sstream> std::wstring StringToWString(const std::string& str) { std::wstringstream wss; wss << str.c_str(); return wss.str(); } std::string WStringToString(const std::wstring& wstr) { std::stringstream ss; ss << wstr.c_str(); return ss.str(); } int main() { std::string utf8Str = "Hello, 世界!"; std::wstring wideStr = StringToWString(utf8Str); std::cout << "Wide string: " << wideStr << std::endl; std::wstring wideStr2 = L"你好,世界!"; std::string utf8Str2 = WStringToString(wideStr2); std::cout << "UTF-8 string: " << utf8Str2 << std::endl; return 0; } ``` 无论使用哪种方法,`StringToWString` 函数将 `std::string` 转换为 `std::wstring`,`WStringToString` 函数将 `std::wstring` 转换为 `std::string`。你可以根据需要选择适合的方法进行转换。 请注意,在使用 `std::wstring` 和 `std::string` 进行转换时,确保你的编译环境支持 Unicode 字符集,并且设置了正确的字符集编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值