string和wstring相互轉換

2021-06-06 09:22:55 字數 991 閱讀 3008

第一種方法:呼叫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...