大家好,欢迎来到IT知识分享网。
string和wstring的区别
wstring是宽字符,占用2个字节的大小,针对UNICODE编码格式,用于对中文汉字的定义和赋值。wstring跟string区别为:字节不同、编码格式不同、使用不同。
2、string:string是窄字符,占用1个字节的大小,即8bit。
也就是说,宽字符,每表示一个字符其实是占了16bit,即2个char的大小。而汉字就是需要16bit来表示。
2、string:string一般针对ASCII编码格式,一个单元一个char。
2、string:在使用英文汉字时,使用string来定义变量进行赋值。
注意要想使用标准C++中string类,必须要包含#include <string>
是<string>,而不是<string.h>,带.h的是C语言中的头文件
#include <iostream> #include <string> #include <Windows.h> //将string转换成wstring std::wstring string2wstring(std::string str) { std::wstring result; //获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); TCHAR* buffer = new TCHAR[len + 1]; //多字节编码转换成宽字节编码 MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len); buffer[len] = '\0'; //添加字符串结尾 //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; } //将wstring转换成string std::string wstring2string(std::wstring wstr) { std::string result; //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL); char* buffer = new char[len + 1]; //宽字节编码转换成多字节编码 WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL); buffer[len] = '\0'; //删除缓冲区并返回值 result.append(buffer); delete[] buffer; return result; } int main() { //double f = 23.43; //std::wstring f_str = std::to_wstring(f); //std::wcout << f_str << std::endl; //std::wstring str = L"你好"; //setlocale(LC_ALL, "chs");//设置wcout输出中文 //std::wcout << str.c_str() << std::endl; setlocale(LC_ALL, "chs");//设置wcout输出中文 std::string str1 = "深圳龙华qinghujiedao"; std::cout << "print str:" << str1 << std::endl; std::wstring wstr = string2wstring(str1); std::wcout << "str2wstr convert:" << wstr << std::endl; std::wstring str2 = L"深圳龙华qinghujiedao"; std::wcout << "print wstr:" << str2 << std::endl; std::string str = wstring2string(str2); std::cout << "wstr2str convert:" << str << std::endl; system("pause"); return 0; }
在显示wstring的过程中,发现wcout不能直接显示中文。需要进行本地化设置,调用函数setlocale()
其中,MultiByteToWideChar和WideCharToMultiByte函数的使用,需要包含#include <Windows.h>的头文件。
wstring和wchar_t*的相互转换
#include <iostream> #include <Windows.h> #include <string> std::wstring wchart_arrayTowstring(wchar_t a[]) { std::wstring wstr = L""; int j = 0; while (a[j] != L'\0') { wstr += a[j]; j++; } return wstr; } int main() { setlocale(LC_ALL, "chs"); //wstring转wchar_t* std::wstring w_str = L"深圳龙华qinghu"; const wchar_t* w_chars = w_str.c_str(); std::wcout << w_chars << std::endl; //wchar_t*转wstring wchar_t w_chars2[] = L"深圳红山hongshan"; std::wstring w_str2 = wchart_arrayTowstring(w_chars2); std::wcout << w_str2 << std::endl; system("pause"); return 0; }
wstring转wchar_t*的两种方式:
wchar_t* w_chars = w_str.c_str(); 或者 wchar_t* w_chars = &w_str[0];
参考博客:
https://it.cha138.com/ios/show-37368.html
wstring是什么?跟string有什么区别_wstring和string的区别_千百元的博客-CSDN博客
string和wstring之间转换的三种方法_string转wstring_利白的博客-CSDN博客
C++ 字符串string、字符char、宽字符数组wstring、宽字符wchar_t互相转换(2021.4.20)_string转化成wchar_jing_zhong的博客-CSDN博客
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122124.html