日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

寬字符串和標(biāo)準(zhǔn)字符串的互相轉(zhuǎn)換

 just_person 2012-03-30
本篇文章主要介紹寬字符串和標(biāo)準(zhǔn)字符串的互相轉(zhuǎn)換,對(duì)中文處理非常有用,標(biāo)準(zhǔn)字符串如果想輸出一個(gè)單漢字需要連續(xù)輸出兩個(gè)字節(jié),比較麻煩,下面給出一個(gè)完整的轉(zhuǎn)換程序,希望對(duì)看到本文章的人有幫助!

#include <iostream>
#include <string>
#include <locale>
using namespace std;

struct auto_setlocate {
  auto_setlocate() {
 setlocale(LC_ALL, "chs");
    }
};

string WstringToString(const wchar_t* wch) {
    auto_setlocate as;
    string ret(wcslen(wch)*2, '\0');
    wcstombs(const_cast<char*>(ret.c_str()), wch, ret.length());
    return ret;
}

string WstringToString(const wstring& wstr) {
    auto_setlocate as;
    string ret(wstr.length()*2, '\0');
    wcstombs(const_cast<char*>(ret.c_str()), wstr.c_str(), ret.length());
    return ret;
}

wstring StringToWstring(const char* ch) {
    auto_setlocate as;
    wstring ret(strlen(ch)/2, '\0');
    mbstowcs(const_cast<wchar_t*>(ret.c_str()), ch, strlen(ch));
    return ret;
}

wstring StringToWstring(const string& str) {    
    auto_setlocate as;
    wstring ret(str.length()/2, '\0');
    mbstowcs(const_cast<wchar_t*>(ret.c_str()), str.c_str(), str.length());
    return ret;
}

int main() { 
// 都輸出“中 中華人民共和國(guó)” ***janvyking999***
  wcout.imbue(locale("chs"));

// 函數(shù)string WstringToString(const wchar_t* wch)
  wchar_t* wct = L"中華人民共和國(guó)";
  wcout<<wct[0]<<" "<<wct<<endl;
  string str1 = WstringToString(wct);
  cout<<str1[0]<<str1[1]<<" "<<str1<<endl;

// 函數(shù)string WstringToString(const wstring& wstr)
  wstring wstr = L"中華人民共和國(guó)";
  wcout<<wstr[0]<<" "<<wstr<<endl;
 string str2 = WstringToString(wstr);
  cout<<str2[0]<<str2[1]<<" "<<str2<<endl;

// 函數(shù)wstring StringToWstring(const char* ch)
  char* chr = "中華人民共和國(guó)";
 cout<<chr[0]<<chr[1]<<" "<<chr<<endl;
 wstring wstr2 = StringToWstring(chr);
 wcout<<wstr2[0]<<" "<<wstr2<<endl;

// 函數(shù)wstring StringToWstring(const string& str)
 string str3 = "中華人民共和國(guó)";
  cout<<str3[0]<<str3[1]<<" "<<str3<<endl;
  wstring wstr1 = StringToWstring(str3);
 wcout<<wstr1[0]<<" "<<wstr1<<endl;

  return 0;
}

關(guān)于函數(shù)setlocale。

本函數(shù)用來配置地域的信息。參數(shù) category 有下列的選擇:

  LC_ALL 包括下面的全項(xiàng)選項(xiàng)都要。

  LC_COLLATE 配置字符串比較,PHP 目前尚未實(shí)作出來本項(xiàng)。

  LC_CTYPE 配置字符類別及轉(zhuǎn)換。例如全變大寫 strtoupper()。

  LC_MONETARY 配置金融貨幣,PHP 目前尚未實(shí)作。

  LC_NUMERIC 配置小數(shù)點(diǎn)后的位數(shù)。

  LC_TIME 配置時(shí)間日期格式,與 strftime() 合用。

  而參數(shù) locate 若是空字符串 "",則會(huì)使用系統(tǒng)環(huán)境變量的 locate 或是 LANG 的值。若 locate 為零,則不會(huì)改變地域化配置。返回新的地域,若系統(tǒng)尚未實(shí)作則返回 false。

另外,關(guān)于strlen,wcslen和lstrlen。

strlen() 返回ANSI字符串長(zhǎng)度; 
wcslen() 返回寬字符串長(zhǎng)度(一般為UNICODE); 
lstrlen() 該函數(shù)返回指定字符串的字節(jié)長(zhǎng)度(ANSI版)或字符長(zhǎng)度(雙字節(jié)標(biāo)準(zhǔn)版);其中不包括終止NULL字符?!±?/p>

#include <iostream>
#include <string>
#include <locale>
using namespace std;

int main() { 
  
 wchar_t* wct = L"中華人民共和國(guó)";
 wstring wstr = L"中華人民共和國(guó)";
  char* ch = "中華人民共和國(guó)";
 string str = "中華人民共和國(guó)";

  cout<<wcslen(wct)<<endl;
  cout<<wstr.length()<<endl;
 cout<<strlen(ch)<<endl;
 cout<<str.length()<<endl;

 return 0;
}  //程序結(jié)果輸出7,7,14,14

 關(guān)于wcstombs和mbstowcs函數(shù)請(qǐng)參考MSDN。

 size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );

mbstr:   The address of a sequence of multibyte characters

wcstr:   The address of a sequence of wide characters

count:   The maximum number of bytes that can be stored in the multibyte output string 

 size_t  mbstowcs( wchar_t *wcstr, const char *mbstr, size_t count );

wcstr:   The address of a sequence of wide characters

mbstr:   The address of a sequence of multibyte characters

count:   The number of multibyte characters to convert

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多