一.两种字符集

  多字节字符集(MBCS):因为计算机最早是在英语国家诞生的,大多数英文信息是由英文字母、数字以及一些其它字符构成了一个128个字符的ASCII字符集。本来这对于英语国家来说够用了。但是随着计算机的普及,非英语国家的文字字符也需要用计算机来存储,这时字符集就需要一种扩展机制了。一种简单的扩展机制就是兼容ASCII字符集,在后面加上自己的编码。可以想象,不同字符的编号长度是不一样的,有些是两个字节,有些是三个字节甚至四个字节等等。这样的字符集就叫多字节字符集。多字节字符集就是多种字符集的统称,比如中文字符集GB2312和GBK、日文编码JIS都是多字节字符集.些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码

  UNICODE(万国码):由于多字节字符遵循的是各个国家的编码,要进行信息交换必须进行繁琐的转换。这时就有人想:有没有一种编码规则,能给全世界的字符都编上统一的编号呢?就这样unicode字符集诞生了。unicode字符集顾名思义就是每个字符都有一个唯一的编码。最早的unicode字符是采用两个字节也是16位对字符进行编码(也就是能够对65536个字符进行编号),故被称为utf-16。后来发现大多信息都是英文构成的,为了节省空间,同时为了兼容单字节的处理系统,就出现了一种变种的unicode字符集——utf8。utf8的实现原理和多字节字符集一样,前面是128个子符是ASCII字符,后面的采用变长的编码方式,就是一个字符可能用两个字节、三个字节或四个字节进行编码。再到后面发现16位的编码也不够用了,采用32位编码,这样就出现了utf-32:

二.c++中的常见的数据类型

  char          是C语言标准数据类型,字符型。通常由编译器决定一个char对象有多少个字节组成,一般是一字节。(ansi字符集)

 LPSTR(char*) LPCSTR(const char*)

wchar_t    是char的Unicode版本。相当于 unsigned short。一般两个字节。(unicode字符集)

 LPWSTR(wchar_t*) LPCWSTR(const wchar_t*)

CHAR       参照定义: typedef   char           CHAR;

WCHAR    参照定义:typedef    wchar_t     WHAR;

TCAHR     通用版字符类型:在ANSI编译方式下为 char , 在Unicode 编译方式下为 wchar_t(这种是一种通用型的字符集,在不同的字符系统中有不同的作用,wcsxxxx是unicode版本的操作函数)  LPTSTR(CHAR*)

CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。

三.数据类型之间的转换

  万能的转换方法:TEXT(),这种方法会检测系统现在的字符集然后自动的做出编码的选择.

  ANSI转换为宽字节:可以在字符串的前面加上"L";或是_T()

  cstring和char*的相互转换:

    cstring->char*:    

CString a=L"HAH";
CStringA temp=str;
char * pp=temp.GetBuffer();

  char*->cstring:直接用cstring的构造函数即可:a=CString("hahha");

  string 和cstring 要以char*为桥梁!!

c++编程的字符集及其转换的更多相关文章

  1. iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)

    iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...

  2. python字符集的转换(mysql数据乱码的处理)

    本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...

  3. windows 编程—— 宽字符集 与 Unicode

    目录: 从ASCII码 到 Unicode Windows 编程中的 "字符” 定义 (如何在windows下进行通用编码) 常用的通用函数,定义 (本文为学习<Programming ...

  4. [转]Linux下转换字符集(UTF8转换)

    今天在Linux 下使用 Iconv 命令转换一个UTF8文件时,总是转换不成功.提示: iconv: 未知 0 处的非法输入序列 后来使用 man iconv 查看,还是没发现异常,因为命令格式都是 ...

  5. Java编程之字符集问题研究

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  6. 字符集(编码)转换_Linux

    ZC: 来自 我的项目 czgj 1.代码: #include <stdio.h> #include <iconv.h> #include <string.h> / ...

  7. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  8. 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换

    第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...

  9. 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)

    Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...

随机推荐

  1. node 笔记整理

    node 合并多个请求的数据 function getList1(num) { var url= "netease/search?keyword=独孤天下&type=song& ...

  2. Flume原理分析与使用案例

    1.flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据 ...

  3. 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)

    题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...

  4. PAT A1011 World Cup Betting(20)

    AC代码 #include <cstdio> #include <algorithm> const int max_n = 3; using namespace std; /* ...

  5. DEDE升级5.7版本后生成页面空白_解…

    今天将DEDECMS V5.6升级到DEDECMS V5.7并升级5.7 SP1后,发现生成首页.栏目.内容页均为空白,没有任何反应,今天发布一个解决方法. 发现每个模板中调用过 Html2Text ...

  6. Python基础『二』

    目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...

  7. redis发布订阅者

    发布者pub.py import redis conn = redis.Redis(host='127.0.0.1', decode_responses=True) conn.publish(') 订 ...

  8. Jmeter之Plugin插件,服务器监控

    Jmeter Plugins插件 我在测试工作中:主要使用了监听器中的图表报告和监控服务器CPU,内存(这篇博文就是对插件的安装,以及jmeter怎么监控服务器CPU~) 1.下载安装Plugins插 ...

  9. IIS--解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项。试图加载

    解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项.试图加载 ASP.NET MVC 项目发布的在本地IIS后,启动网站出现未能加载文件或程序集“…”或它的某一个依赖项. ...

  10. 【原创】大数据基础之Logstash(6)mongo input

    logstash input插件之mongodb是第三方的,配置如下: input { mongodb { uri => 'mongodb://mongo_server:27017/db' pl ...