C++字符串完全指南 - Win32字符编码(一)
C++字符串完全指南 - Win32字符编码(一)
翻译:连波
14/11/2002
URL: http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39098124,00.htm
前言
字符串的表现形式各异,象TCHAR,std::string,BSTR等等,有时还会见到怪怪的用_tcs起头的宏。这个指南的目的就是说明各种字符串类型及其用途,并说明如何在必要时进行类型的相互转换。
在指南的第一部分,介绍三种字符编码格式。理解编码的工作原理是致为重要的。即使你已经知道字符串是一个字符的数组这样的概念,也请阅读本文,它会让你明白各种字符串类之间的关系。
指南的第二部分,将阐述各个字符串类,什么时候使用哪种字符串类,及其相互转换。
字符串基础 - ASCII, DBCS, Unicode
所有的字符串类都起源于C语言的字符串,而C语言字符串则是字符的数组。首先了解一下字符类型。有三种编码方式和三种字符类型。
第一种编码方式是单字节字符集,称之为SBCS,它的所有字符都只有一个字节的长度。ASCII码就是SBCS。SBCS字符串由一个零字节结尾。
第二种编码方式是多字节字符集,称之为MBCS,它包含的字符中有单字节长的字符,也有多字节长的字符。Windows用到的MBCS只有二种字符类型,单字节字符和双字节字符。因此Windows中用得最多的字符是双字节字符集,即DBCS,通常用它来代替MBCS。
在DBCS编码中,用一些保留值来指明该字符属于双字节字符。例如,Shift-JIS(通用日语)编码中,值0x81-0x9F 和 0xE0-0xFC 的意思是:“这是一个双字节字符,下一个字节是这个字符的一部分”。这样的值通常称为前导字节(lead byte),总是大于0x7F。前导字节后面是跟随字节(trail byte)。DBCS的跟随字节可以是任何非零值。与SBCS一样,DBCS字符串也由一个零字节结尾。
第三种编码方式是Unicode。Unicode编码标准中的所有字符都是双字节长。有时也将Unicode称为宽字符集(wide characters),因为它的字符比单字节字符更宽(使用更多内存)。注意,Unicode不是MBCS - 区别在于MBCS编码中的字符长度是不同的。Unicode字符串用二个零字节字符结尾(一个宽字符的零值编码)。
单字节字符集是拉丁字母,重音文字,用ASCII标准定义,用于DOS操作系统。双字节字符集用于东亚和中东语言。Unicode用于COM和Windows NT内部。
读者都很熟悉单字节字符集,它的数据类型是char。双字节字符集也使用char数据类型(双字节字符集中的许多古怪处之一)。Unicode字符集用wchar_t数据类型。Unicode字符串用L前缀起头,如:
wchar_t wch = L’1’; // 2 个字节, 0x0031
wchar_t* wsz = L”Hello”; // 12 个字节, 6 个宽字符
C++字符串完全指南 - Win32字符编码(一)相关推荐
- C++字符串完全指南 - Win32字符编码(二)
C++字符串完全指南 - Win32字符编码(二) 作者: 翻译:连波 2002-11-15 14:13:21 Win32 API中的MBCS 和 Unicode API的二个字符集 也许你没有注意到 ...
- 《C++字符串完全指南——第一部分:win32 字符编码》
<C++字符串完全指南--第一部分:win32 字符编码> 原作者:Michael Dun 译 者:Dingqiao Wang 引言 毫无疑问,你肯定见过像TCHAR, st ...
- C++字符串完全指引之一 —— Win32 字符编码
[DOC]C++字符串完全指引之一 C++字符串完全指引之一 -- Win32 字符编码 原著:Michael Dunn 翻译:Chengjie Sun 原文出处:CodeProject:The Co ...
- C++字符串完全指引之一(Win32 字符编码)
C++字符串完全指引之一(Win32 字符编码) 文档作者:Michael Dunn 所属类别:VC++ 推荐指数:★★★★ 文档人气:400 本周人气:14 发布日期:2006-7-12 引言 毫无 ...
- js笔记(三)ES5、ES5新增的数组的方法、字符串的方法、字符编码、对象的序列化和反序列化、bind
数组方法.字符串方法总结 大目录 小目录 一.ES5严格模式 1. 严格模式: 2. 严格模式的行为变更: 二.ES5新增的数组的方法 1. 判断是否为数组:Array.isArray(): 2. 判 ...
- 字符串转换函数和字符编码
//将单字节char*转化为宽字节wchar_t* wchar_t* AnsiToUnicode( const char* szStr ) { int nLen = MultiByteToWideC ...
- C++字符串完全指南(转)
C++字符串完全指南 - Win32字符编码(一)翻译:连波 14/11/2002 URL: http://www.zdnet.com.cn/developer/tech/story/0,200008 ...
- c++字符串完全指南
C++字符串完全指南 - Win32字符编码(一) 前言 字符串的表现形式各异,象TCHAR,std::string,BSTR等等,有时还会见到怪怪的用_tcs起头的宏.这个指南的目的就是说明各种字符 ...
- C++字符串完全指南(zz)
文章真的很好!让我想明白了许多,,,所以zz了~~ C++字符串完全指南 - Win32字符编码(一) 前言 字符串的表现形式各异,象TCHAR,std::string, BSTR 等等,有时还会见到 ...
最新文章
- 瀑布式开发与敏捷开发的区别是什么
- selenium+python headless 爬虫环境配置
- 104_鼠标事件对象
- python k线顶分型_【缠论】分型、笔的定义及其程序化
- 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
- ubuntu18.10终端的方块改成竖线
- apollo 配置中心_.NET Core 下使用 Apollo 配置中心
- windowns2019辅域添加
- C#播放流媒体的几种方法
- Nginx-反向代理
- 瑞幸咖啡“生死劫”:财务数据曾惊天造假,一年巨亏几十亿美元
- waning rm -i rm -rvfi
- 微信小程序--企业认证篇
- selenium IDE 遇到 Preparing to run your test 问题的解决
- 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
- PCL点云去背景(相减)的方法
- mysql:insert ignore、insert和replace区别
- 跻身四强 | 坤前强势入围IDC加速计算服务器榜单
- 借助 ONLYOFFICE 宏通过 OpenAI 数据填充单元格
- CTF:PHP MD5函数0E绕过漏洞
热门文章
- 拥抱 Android Studio 之二:Android Studio 与 Gradle 深入
- JavaScript基础知识(3)
- 强化学习图鉴|人工智能新兴子领域,分布式强化学习是AI技术未来大规模实用化的关键?
- Web Pages 快速入门
- SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】
- SpringBoot获取ServletContext和webApplicationConnect几种方法
- 国产Excel开发组件Spire.XLS【转换】教程(5):#/将特定工作表单元格转换为图像
- 【思维导图】计算机网络第六章应用层
- 华硕主板固态硬盘不识别_华硕主板Z97-A无法识别intel M.2 NVME固态硬盘的解决方法...
- java navmesh_服务器使用recast navigation