#include "stdio.h"
#include "iostream"
#include "string"
#include "locale.h"
//#include "winapi.h"
using namespace std;/*
编码统一化,编写单一源代码如果我们建立的两个版本的程序,一个处理ACSII字符集,另一个处理Unicode字符串,
最好的解决方法是编写出一个既能按照ASCII编译
又能按照Unicode编译的单一源代码,主要核心的利用宏定义,进行条件编译#ifdef_UNICODE
typedef wstring tstring;
typedef wchar_t tchar;
#define _T(x) L## X
#else
typedef string tstring;
typydef char tchar;
#define _T(x) x
#endif
*/#ifdef _UNICODE
typedef wstring tstring;
typedef wchar_t tchar;
#define _T(x) L## X
#else
typedef string tstring;
typedef char tchar;
#define _T(x) x
#endif//string --> wstring
wstring s2ws(const string &s)
{string curLocale = setlocale(LC_ALL, NULL);//curLocale = "C"setlocale(LC_ALL, "chs");const char * _Source = s.c_str();size_t _Dsize = s.size() + 1;wchar_t * _Dest = new wchar_t[_Dsize];wmemset(_Dest, 0, _Dsize);mbstowcs(_Dest, _Source, _Dsize);wstring result = _Dest;delete[] _Dest;setlocale(LC_ALL, curLocale.c_str());return result;
}//wstring --> string
string ws2s(const wstring &ws)
{string curLocale = setlocale(LC_ALL, NULL);setlocale(LC_ALL, "chs");const wchar_t * _Source = ws.c_str();size_t _Dsize = 2*ws.size() + 1;char * _Dest = new char[_Dsize];memset(_Dest, 0, _Dsize);wcstombs(_Dest, _Source, _Dsize);string result = _Dest;delete[] _Dest;setlocale(LC_ALL, curLocale.c_str());return result;
}int main()
{try{//string 构造函数,利用好构造函数更高效,每一个对象都需要构造,在构造的时候赋初值//string()   string(const string & s)   string(const char *s)   string(const int n, const char c) int sib = 0;string a;//string() string b(a);//string(const string & s)string c("aaa");//string(const char *s)string d(3, 'g');// string(const int n, const char c) //string的赋值string s1 = "test stl";//string &operator=(const char * s);cout << "s1" << s1.c_str();string s2 = s1;//string &operator=(const string &s);cout << "s2" << s2.c_str() << endl;string s3;//string() s3.assign("abcd");//string & assign(const char *s);cout <<"s3" << s3.c_str() << endl;char c1[10] = {'1','2','3','4','5','6'};string s4;s4.assign(c1, 4);cout << "c1" << c1 <<  ", s4:" << s4.c_str() << endl;//int length() const;//返回当前字符串的长度,长度不包括字符串结尾的'\0'//bool empty() const;//判断当前字符串是否为空//string 存取字符操作//const char & operator[](int n) const;//不能被try//const char & at(int n) const;  //可以被try,程序健壮性强//char &operator[] (int n);//char &at(int n);//string的成员函数//int copy(char * s, const int n, const int pos);//从string中this获取从下标为pos开始的n个字符,复制到s指针指向的空间中(保证s的空间足够大) ‘、0’string str1 = "1234567890";char cstr1[6];//默认没有赋初值,内存中数据未知memset(cstr1, 0, sizeof(cstr1));//int clen = strlen(cstr1);//int csizeof = sizeof(cstr1);//计算数组长度要用sizeofint nCount = str1.copy(cstr1, 2, 2);int nCount = str1._Copy_s(cstr1, strlen(cstr1), 2, 3);//copy这个函数并没有把'\0'拷贝过来//cstr1[csizeof - 1] = '\0';//clen = strlen(cstr1);//csizeof = sizeof(cstr1);//char cstr2[5] = "1234";//string find 正向查找,第一个匹配的字符的下标//int find(const char c, int pos = 0) const;//int find(cosnt char *s, int pos = 0) cosnt;//int find(const string & s, int pos = 0) const;//string rfind 反向查找//int rfind(const char c, const int pos = 0) const;//int rfind(const char *s,  //string的连接//string & operator+(const string &s);string strA = "hello ";string strB = "world";string strC = strA + strB;cout << "strC:" << strC << "strC.Len :" << strC.length() << endl;//string & operator+=(const string &s);//string & operator+(const char *s);//string & operator+=(const char *s);//string & append(const string &s);//string & append(const char *s);//string & append(const char *s, const int n);//string & append(const string & s, const int n, const int pos);//string & append(const int n, char c);string strD;strD.append(strA);//string 比较,> 的时候返回1, =的时候返回0,<的时候返回-1,比较的时候参考字典顺序,前面的小,后面的大,A < a//int compare(const string &s) const;//string 中的this不能变,最后要加const, 输入的s不能变,加const, 不能改变的都要加const,加引用//int compare(cosnt char * s) const;////string 的截取//string & substr(const int start, const int end) const ;//string 插入 insert//string &insert(int pos, const char *s);//string &insert(int pos, const string &s);//string &insert(int pos, int n, char c);//string 替代 replace//string earse 删除//string &earse(int pos, int n);strA.erase(1,2);//string swap 交换//string clear//string 是对char* 的管理,wstring是对wchar的管理//本质为char和wchar的区别,char占用一个字节,wchar 占用两个字节,wstring的函数和string的一样的wstring wstrA;wstrA = s2ws("我爱中国");//wstring wstrA(L"我爱中国");    wcout.imbue(locale("chs")); wcout << "wstrA:" << wstrA << ", wstrA.Len :" << wstrA.length() << endl;//string and wstring的转换///*方法一:调用Windows的API函数:WideCharToMultiByte()和MultiByteToWideChar()函数方法二:使用ATL的CA2W类和CW2A类,或者使用A2W宏与W2A宏方法三:跨平台的方法,使用CRT库的mbstowcs()和wcstombs()  mbs是多字节的意思,wcs是单字节的意思*/cout << "cstr1:" << cstr1 << ", nCount :" << nCount << endl;}catch(...){cout << "adfadfefasdfadf err";}return 0;
}

C++ 中ACSII字符集和Unicode字符集转换相关推荐

  1. 使用 _tprintf 宏兼容多字节字符集和Unicode字符集

    我们知道在windows平台上写C程序要考虑字符编码问题,为了兼容多字节字符集和Unicode,涉及字符,字符串操作,都要用TEXT宏围起来. 如果要使用printf,但是不确定字符集,可以使用 _t ...

  2. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  3. Unicode字符集和多字节字符集关系(一)

    另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...

  4. mysql字符集和表字符集_Mysql数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理 ...

  5. mysql字符集和表字符集_设置数据库的字符集和设置表字段字符集的区别是什么?...

    对于oracle来说,只有数据库字符集这个说法,不存在什么表字符集和字段字符集.你说的这个是mysql的字符集,数据库字符集可以和表字符集不同,也可以和列字符集不同,也就是说,你的数据库字符集为utf ...

  6. mysql字符集与校对规则设置_mysql中的字符集和校对规则(mysql校对集)

    1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...

  7. VS2005 宽字符 unicode字符集和多字节字符集

    在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过 其区别如下 unicode字符集 void Point::output(int ...

  8. 聊聊字符集(一)——ASCII字符集和GB2312字符集

    由于在工作中经常会遇到数据在各种不同数据库流转的需要,偶尔会碰到一些中文乱码的情况,借此机会,记录一下一些常见的字符集和字符编码. 字符:各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字 ...

  9. python中的字符、编码、转换

    文章目录 写在前面 1.编码 1.1.ASCII 1.2.Unicode 1.3.UTF-8 1.4.GBK 1.5.URL编码 1.6.HTML实体 2.python字符前面的u.b.r.f 2.1 ...

最新文章

  1. 在Makefile中的 .PHONY 是做什么的?
  2. QT数据库驱动和多国语言驱动部署注意事项
  3. 蓝桥杯第五届决赛真题大全解(java版本)
  4. 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
  5. python如何将utf-8编码文件改为ansi编码文件_Excel导入CSV文件乱码?两个小方法让文件正常显示...
  6. 计算机二级高级应用考题,2016计算机二级MSOFFICE高级应用考试真题
  7. [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence
  8. 吴恩达老师的机器学习和深度学习课程笔记打印版(全)
  9. C++ 各种数据类型须知
  10. python读图片生成ROI并保存
  11. JavaScript锅打灰太狼游戏
  12. 经验分布函数(Empirical Distribution Functions)
  13. 视频 | 计算万物的理论
  14. Tomcat服务器的使用
  15. 三维全息显微镜成生物成像领域“新宠”
  16. 好用的web报表设计器(报表工具)
  17. Pyton入门的歪路
  18. 金融科技大数据产品推荐:恒丰银行实时智能决策引擎
  19. 零预算引爆个人和企业品牌
  20. 机器学习(十一) 迁移学习

热门文章

  1. 【演示文稿制作软件】Focusky教程 | 设置动画效果
  2. Google Earth Engine(GEE)——一键下载研究区所有单景影像
  3. 给机器人罗宾写一封英语回信_写一篇关于200年后的机器人英语作文
  4. 【C语言】判断一个数是不是回文数
  5. LPC1768配置系统延时函数(10纳秒级别和1MS级别)
  6. JAVA提高十二:HashMap深入分析
  7. osg 节点渲染 重新渲染模型 (已解决)
  8. [转] 英语连接词~很全的版本!!!
  9. 图片加载库 kean/Nuke ,源代码看看
  10. 6个压箱底的资源网站,质量高还免费,大厂都在用