一.两种字符集

  多字节字符集(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. c# Winform WebBrowser的自动化模拟点击

    https://blog.csdn.net/vs920079469vs/article/details/78459025

  2. Leetcode之101. Symmetric Tree Easy

    Leetcode 101. Symmetric Tree Easy Given a binary tree, check whether it is a mirror of itself (ie, s ...

  3. 【miscellaneous】IP多播技术及其编程

    标  题: IP多播技术及其编程 发信站: 幽幽黄桷兰 (Mon Jun 16 10:35:39 2003) 转信站: SMTH!maily.cic.tsinghua.edu.cn!news2.ues ...

  4. typescript实现类规则

    备注: 单独的 index.d.ts对于代码实现没有约束性,将约束和实现写在一个页面里有约束性,或者使用如下: // clock.interface.ts export interface Clock ...

  5. git 命令 查看历史提交 git log

    怎么理解git commit 命令 git commit 相当于 我们虚拟机快照操作,每次执行commit命令 相当于对本地仓库做一次快照,保存了当时仓库的状态, git commit -m 加上的& ...

  6. Linux切换root超级用户问题

    具体方法如下: Ubuntu 1.使用终端工具的快捷键Ctrl + Alt +T 打开终端. 2.终端工具打开后如下图所示,操作就在这个窗口中进行 3.切换root用户的的方式一 执行命令 sudo ...

  7. C/C++文件输入输出操作——FILE*、fstream、windowsAPI(转载)

    基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdi ...

  8. GridFS文件操作

    目录 1. GridFS介绍 2. GridFS 存取文件测试 2.1 新建项目配置pom.xml 2.2 在application.yml配置mongodb 2.3 GridFS存取文件测试 2.4 ...

  9. LeetCode 160——相交链表(JAVA)

    编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...

  10. jvm GC:垃圾回收的测试与分析

    实验环境: (1)Java版本以及模式: java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0 ...