c++编程的字符集及其转换
一.两种字符集
多字节字符集(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++编程的字符集及其转换的更多相关文章
- iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)
iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...
- python字符集的转换(mysql数据乱码的处理)
本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...
- windows 编程—— 宽字符集 与 Unicode
目录: 从ASCII码 到 Unicode Windows 编程中的 "字符” 定义 (如何在windows下进行通用编码) 常用的通用函数,定义 (本文为学习<Programming ...
- [转]Linux下转换字符集(UTF8转换)
今天在Linux 下使用 Iconv 命令转换一个UTF8文件时,总是转换不成功.提示: iconv: 未知 0 处的非法输入序列 后来使用 man iconv 查看,还是没发现异常,因为命令格式都是 ...
- Java编程之字符集问题研究
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
- 字符集(编码)转换_Linux
ZC: 来自 我的项目 czgj 1.代码: #include <stdio.h> #include <iconv.h> #include <string.h> / ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换
第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...
- 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)
Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...
随机推荐
- hive端建表中文注释乱码
背景:mysql编码是utf-8,mysql中建库建表中文显示都正常,但在hive窗口中建表时字段中文注释均乱码的问题. 问题:hive中建表后字段中文注释显示异常. 1. 定位 mysql 端问题 ...
- 【转】ffluos编译
FluffOS是在MUDOS基础上更新完成的.进行了许多新功能和bug修复. 针对LPC有很好的兼容性,如果你的MUD运行MUDOS V22+版本,可以很容易运行在fluffos上. 系统环境: Cn ...
- python基础知识(继承)
继承的基本语法 class Class(继承那个基类如果有多个基类用逗号隔开,如果没有就继承object): """ 类的帮助信息""" ...
- linux 网络相关
1. 配bond 模式 将eth0 和 eth1 绑定 ,master 为bond2 ,直接上文件 eth0 和 eth1 , 类似,如下 ,关键点 MASTER and SLAVE TYPE ...
- 【DSP开发】DSP通用并行端口uPP
这是翻译TI官方文档<KeyStone Architecture Universal Parallel Port (uPP)>SPRUHG9有关通用并行端口uPP的内容(除寄存器部分) ...
- 【VS开发】ATL辅助COM组件开发
有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...
- Java学习笔记-Java中的常用类
Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...
- springboot整合es客户端操作elasticsearch(三)
继续上个随笔: 那么我们只需要修改controller中文件就可以完成相关操作 本次主要是对文档得操作: 更新文档: package com.cxy.elasticsearch.controller; ...
- kernel32.dll 这个系统模块
详细解读:远程线程注入DLL到PC版微信 一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一 ...
- IDEA安装maven
1.先到maven的官网下载安装包:http://maven.apache.org/download.cgi 解压安装包 2.配置环境变量 新建变量名MAVEN_HOME 变量值 D:\Soft ...