multi-byte wide-char

來源:互聯網
上載者:User
/* * C++ 字串的一點點轉換 */#include <iostream>#include <string>#include <cstring>#include <cstdlib>#include <clocale> //setlocale#include <Windows.h>#include <WinCon.h>using namespace std;//using namespace System; //需要CLR支援wchar_t* mbs2wcs(const char* mbstr){wchar_t* wcstr = NULL;// Get the size of wchar_t after converted#ifdef WIN32int size = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, NULL, 0);#elsesize_t size = mbstowcs(NULL, mbstr, 0);#endifwcstr = new wchar_t[size+1];if (wcstr){memset(wcstr, 0, size * sizeof(wchar_t));#ifdef WIN32int ret = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, wcstr, size);if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.#elsesize_t ret = mbstowcs(wcstr, mbstr, size+1);if (ret == -1)#endif{delete[] wcstr;wcstr = NULL;}}return wcstr;}char* wcs2mbs(const wchar_t* wcstr){char* mbstr = NULL;// Get the size of char after converted#ifdef WIN32int size = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, NULL, 0, NULL, NULL);#elsesize_t size = wcstombs(NULL, wcstr, 0);#endifmbstr = new char[size+1];if (mbstr){memset(mbstr, 0, size * sizeof(char));#ifdef WIN32int ret = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, mbstr, size, NULL, NULL);if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.#elsesize_t ret = wcstombs(mbstr, wcstr, size+1);if (ret == -1)#endif{delete[] mbstr;mbstr = NULL;}}return mbstr;}int main(int argc, char *argv[]){setlocale(LC_ALL, "chs");//設定字碼頁,簡體中文是936SetConsoleOutputCP(936);cout<<"string convert..`\nchar *\nwchar_t\n`\n"<<endl;char *str = "long long ago, there is a girl, she\'s name is little redhat.";cout<<"\nchar *str :\n"<<str<<endl;//mbstowcs && wcstombs// Convert to a wchar_t*wchar_t *wstr;wstr = mbs2wcs(str);wcout<<"\nwchar_t *wstr : \n"<<wstr<<endl;cout<<"sizeof(*str): "<<sizeof(*str)<<" byte"<<endl;  cout<<"sizeof(*wstr): "<<sizeof(*wstr)<<" byte"<<endl;    //wstr指向第一個字元'l'佔了16bit=2bytereturn 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.