wchar_t与string 互转换的两种方法自己用了好使
来源:互联网 发布:手机淘宝回到顶部 编辑:程序博客网 时间:2024/05/16 08:41
首先介绍下wchar_t类型
一、wchar_t类型的由来
我们知道char类型变量可以存储一个字节的字符,它用来保存英文字符和标点符号是可以的,但是对于汉字、韩文以及日文这样的字符却不可以,因为汉字、韩文以及日文每一个文字都占据两个字节,为了解决这个问题,c++提出了wchar_t类型,称之为双字节类型,又称宽字符类型。
二、下面是一个范例
int main(int argc,wchar_t*argv[])
{
//使用setlocale函数将本机的语言设置为中文简体
setlocale(LC_ALL,"chs");//LC_ALL表示设置所有的选项(包括金融货币、小数点,时间日期格式、语言字符串的使用习惯等),chs表示中文简体
wchar_t wt[] = L"中国你好!";//大写字母L告诉编译器为"中"字分配两个字节的空间
wcout<<wt<<endl;//使用wcout来代替cout输出宽字符,wcin类代替cin输入宽字符
cout<<wcslen(wt)<<endl;//wcslen输出宽字符串的长度,输出长度是5
cout<<sizeof(wt)<<endl;//输出长度是12个字节,最后的wchar_t类型的'\0'两个字节
return 0;
}
三、 和string类型之间的转换
string str("你好中国");
wchar_t * wc =new wchar_t[str.size()];
swprintf(wc,100,L"%S",str.c_str());//注意大写
***********************************************************************************************
第二篇文章
开发语言:C++
#include<iostream>
#include <windows.h>
#include <string>
// wchar_t to string
void Wchar_tToString(std::string& szDst, wchar_t*wchar)
{
wchar_t * wText = wchar;
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,wText,-1,NULL,0,NULL,FALSE);//WideCharToMultiByte的运用
char *psText; // psText为char*的临时数组,作为赋值给std::string的中间变量
psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);//WideCharToMultiByte的再次运用
szDst = psText;// std::string赋值
delete []psText;// psText的清除
}
// string to wstring
void StringToWstring(std::wstring& szDst,std::string str)
{
std::string temp = str;
int len=MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, NULL,0);
wchar_t * wszUtf8 = new wchar_t[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, (LPWSTR)wszUtf8, len);
szDst = wszUtf8;
std::wstring r = wszUtf8;
delete[] wszUtf8;
}
int main(int argc, char *argv)
{
//wchar_t to string
std::string szDest;
wchar_t wText[20] = {L"宽字符转换字符串实例!OK!"};
Wchar_tToString(szDest, wText);
std::cout<<"szDest: "<<szDest<<std::endl;
/**
* wchar_t 定义的变量为什么不能输出呢?
* 宽字符类型要本地化,否则输不出想要结果。
* 本地化有三条语句可以使用,任取其一。最后一句是全局函数,前两个是wcout的一个成员函数的两种表达方式。
*/
//std::wcout.imbue(std::locale("chs"));
//std::wcout.imbue(std::locale(""));
setlocale(LC_ALL,"Chinese-simplified");
//string to wstring
std::string szSrc = "字符串转换宽字符实例!OK!";
std::wstring wszDest;
StringToWstring(wszDest, szSrc);
std::wcout << "wszDest: " << wszDest <<std::endl;
/**
string to wchar_t
*/
string str="字符串转换宽字符实例!OK!";
std::wstring widstr = std::wstring(str.begin(), str.end());
const wchar_t *pwidstr = widstr.c_str();
// 此方法简单,但是 delete wc;时会出异常
wchar_t * wc = new wchar_t[szSrc.size()];
swprintf(wc,L"%S ",szSrc.c_str());//注意大写S。。
std::wcout <<"szSrc: " << wc <<std::endl;
//delete wc;
system("PAUSE");
}
- wchar_t与string 互转换的两种方法自己用了好使
- wchar_t* 与 char* 相互转换(自己写的函数)
- (好使)用Java集合中的Collections.sort方法对list排序的两种方法
- C++ string 、char 、char *、wstring、wchar_t * 、wchar_t 之间的转换
- wchar_t 转换 string & std::string 转换 wchar_t
- wchar_t 转换 string & std::string 转换 wchar_t
- wchar_t 与 char的转换
- 转载关于int与string类型转换的两种方法
- wchar_t char string wstring 之间的转换
- wchar_t char string wstring 之间的转换
- wchar_t char string wstring 之间的转换
- 在VC++.net中将System::String __gc* 转换为本机的char *或wchar_t *的三种方法
- int类型转换为string类型的两种方法
- 20170827_int 转换成 string 的两种方法
- c++中的char*与wchar_t*与string以及wstring之间的相互转换
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
- 关于C++中的char*与wchar_t*这两种类型的相互转换
- Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]
- error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”的解决方案
- 博客开篇
- java学习笔记泛型简述
- SpringMVC 分页
- POJ 3273 Monthly Expense (二分答案)
- wchar_t与string 互转换的两种方法自己用了好使
- html5实现多文件上传
- 100%正确的内存泄漏分析工具 ------ tMemMonitor (TMM)
- Spring+MyBatis组合开发简单实例
- HDU 5438 Ponds
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
- android 应用程序入口
- PHP error_reporting() 错误控制函数功能详解
- 两个一元多项式相加(链表 || 顺序表实现)