国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

string和wstring互轉(zhuǎn)、全角半角互轉(zhuǎn)

2019-11-10 17:51:09
字體:
供稿:網(wǎng)友

string和wstring互轉(zhuǎn)、全角半角互轉(zhuǎn)

一.string和wstring互轉(zhuǎn)

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;

}

 

二.寬字符全角半角互轉(zhuǎn)

//UTF-8:是Unicode字符的實(shí)現(xiàn)方式之一,它使用1-4個(gè)字符表示一個(gè)符號,

//根據(jù)不同的符號而變化字節(jié)長度。

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);


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临安市| 梧州市| 扶余县| 阳西县| 正蓝旗| 平顶山市| 修文县| 孟州市| 丹阳市| 临潭县| 临湘市| 祁连县| 噶尔县| 余干县| 沙洋县| 元阳县| 云阳县| 南投县| 西藏| 三穗县| 孟州市| 肇源县| 鹿泉市| 黔江区| 湟源县| 浦县| 紫阳县| 睢宁县| 嘉兴市| 崇州市| 水城县| 西乡县| 宁河县| 津市市| 长岛县| 平顺县| 金坛市| 苗栗县| 桦南县| 洛宁县| 梁河县|