在以前vc++6.0中預設的字元集是多位元組字元集(mbcs:multi-byte character set),而vs2005及以後預設的字元集是unicode,這樣導緻以前在vc6.0中非常簡單實用的各類字元操作和函數在vs2010環境下運作時會報各種各樣的錯誤。
字元集可以通過工程屬性修改:“工程-屬性-字元集”。
cstring在unicode和多位元組字元集下的差別:cstring 是基于 tchar 資料類型的。如果為程式的生成定義了符号 _unicode,則會将 tchar 定義為 wchar_t 類型(一個 16 位的字元編碼類型);否則,會将它定義為 char(普通的 8 位字元編碼)。于是,在 unicode 下,cstring 由 16 位字元組成。如果沒有 unicode,它們則由 char 類型的字元組成(來自msdn)。
以下是cstring在visual c++ .net 2010環境中unicode字元集下cstring和char *之間互相轉換的幾種方法,其實也就是unicode字元集與mbcs字元集轉換。
1.unicode下cstring轉換為char *
方法一: 使用api:widechartomultibyte進行轉換


方法二:使用函數:t2a、w2a
2、unicode下char *轉換為cstring
方法一:使用api:multibytetowidechar進行轉換


方法二:使用函數:a2t、a2w
下面是在網上看到的轉換代碼,注意函數multibytetowidechar()和widechartomultibyte()第四個參數傳入-1時表示第三個參數傳入的字元串是null結尾的(null-terminated),這時候傳回的位元組數(字元數)就包含了null,詳情看msdn。


參考:
<a href="http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx">http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx</a>
widechartomultibyte:
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx</a>
multibytetowidechar:
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx</a>
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
http://www.cnblogs.com/luxiaoxun/p/3454733.html