第一種方法:呼叫widechartomultibyte()和multibytetowidechar(),**如下(關於詳細的解釋,可以參考《windows核心程式設計》):
#include
#include
using namespace std;
//converting a wchar string to a ansi string
std::string wchar2ansi(lpcwstr pwszsrc)
string ws2s(wstring& inputws)
//converting a ansi string to wchar string
std::wstring ansi2wchar(lpcstr pszsrc, int nlen)
std::wstring s2ws(const string& s)
第二種方法:採用atl封裝_bstr_t的過渡:(注,_bstr_是microsoft specific的,所以下面**可以在vs2005通過,無移植性);
#include
#include
using namespace std;
#pragma comment(lib, "comsuppw.lib")
string ws2s(const wstring& ws);
wstring s2ws(const string& s);
string ws2s(const wstring& ws)
wstring s2ws(const string& s)
第三種方法:使用crt庫的mbstowcs()函式和wcstombs()函式,平台無關,需設定locale。
#include
#include
using namespace std;
string ws2s(const wstring& ws)
std::wstring s2ws(const std::string& s)
關於string和wstring的實現
印象中早期的wstring和string的實現都是基於引用計數然後再加copy on write的。基於引用計數和copy on write的實現不是執行緒安全的,不建議用在多執行緒環境中。這一思維 由於工作的關係,我看了vs2005平台下的string和wstring的實現,發現這兩個實現 不是基...
C 標準裡 string和wstring
在c 標準裡定義了兩個字串string和wstring typedef basic stringstring typedef basic stringwstring 前者string是常用型別,可以看作char,其實這正是與string定義中的 elem char相一致。而wstring,使用的是w...
C 標準裡 string和wstring
在c 標準裡定義了兩個字串string和wstring typedef basic stringstring typedef basic stringwstring 前者string是常用型別,可以看作char,其實這正是與string定義中的 elem char相一致。而wstring,使用的是w...