最近用delphi xe做了个东西,因为以前一直使用Delphi 7做开发,delphi 7 到delphi XE有了很大的变化,最大的变化就是对Unicode的支持,所以刚开始使用DELPHI XE时还有些不太习惯,尤其在字符串处理的时候。

DELPHI XE 增加了UnicodeString 类型,这在Delphi 7中是没有的,默认的String字符串为UnicodeString,而String在Delphi 7中是AnsiString类型,在新版的DELPHI中,字符串的存储格式也发生了变化:

在DELPHI7中,字符串的存储格式是这样子的:

【引用计数位(-8byte)】【字符串长度(-4byte)】【字符串内容】

这一结构在DELPHI2009时发生了变化,增加了代码页、元素长度两部分内容:

【代码页(-12byte)】【元素长度(-10)】【引用计数位(-8byte)】【字符串长度(-4byte)】【字符串内容】

在新版本的DELPHI中,不论是UnicodeString类型还是AnsiString类型,都遵循上面结构,不同之处是元素长度部分,UnicodeString类型元素长度部分为2,而AnsiString类型元素长度部分为1,也就是说,Unicode字符串中每个字符占用两个字节的位置,而AnsiString占用一个字节的位置。

除了UnicodeString字符串类型外,在新版本的Delphi中,还增加了RawByteString字符串类型,RawByteString字符串类型有什么特殊的用途呢?在查看DELPHI源码时,我们可以看到其定义:
RawByteString = type AnsiString($FFFF);
由此可见,可以认为RawByteString类型是以AnsiString类型为基础的,其特点是不管传入的字符串的代码页是什么,RawByteString字符串会原封不动的保持传入数据的原样。这里说明一下:type AnsiString(【代码页】)可以定义不同代码页的字符集编码,例如:
GbkString = type AnsiString(936);
就是定义了Gbk编码的字符集,当我们为GbkString类型的变量传入字符串时,其存储格式就会按照GBK编码进行存储。

转载于:https://www.cnblogs.com/MaxWoods/p/3305505.html

delphi XE的字符串处理相关推荐

  1. Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 .

    Delphi7升级到Delphi 2010.Delphi XE.Delphi XE2总结 这两天把一个使用Delphi2007成功升级到了Delphi2010.升级途中很艰辛,总结了 以下经验与大家分 ...

  2. RAD Studio 10.4 for delphi XE Assigned和Nil的联系与区别

    RAD Studio 10.4 for delphi XE Assigned和Nil的联系与区别 一.原理 系统级别的函数System.pas : System.Assignedfunction As ...

  3. delphi XE关于微信公众号支付及微信零钱支付的便捷解决方案

    delphi XE关于微信公众号支付及微信零钱支付的便捷解决方案 https://download.csdn.net/download/pulledup/12683611 一.需求 因为微信公众号支付 ...

  4. delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达

    delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达 一.uses REST.Types; //var ...

  5. delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据

    delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据 一.工程 program TreeView; usesSystem.StartUpCopy,FMX. ...

  6. Delphi XE 使用 MySQL 数据库一个奇怪的问题

    Delphi XE 使用 MySQL 数据库一个奇怪的问题 我用的是自带的 ADO 组件连接 MYSQL ,连接很简单,如下: 1.下载一个 MYSQL 驱动安装上 下载地址 2.连接串 Adoc.C ...

  7. Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG

    Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG 在使用 ListView DynamicAppearance 时发现非常强大,可以加很多东西,但没有发现复选框(哪位大佬 ...

  8. 封装的ini文件类。保存为unicode的。解决delphi xe的TiniFile保存后不为unicode的问题...

    网络摘抄 //刚封装的ini文件类.保存为unicode的.解决delphi xe的TiniFile保存后不为unicode的问题 //今天发现delphi xe的TiniFile类保存后的文件不是以 ...

  9. delphi xe 10.3 firemonkey stringdrig 插入,删除,添加

    以下是在WIN7 64 ,delphi xe 10.3 以下成功运行: 运行界面: 代码 unit Unit1; interface uses   System.SysUtils, System.Ty ...

最新文章

  1. apache安装mod_ssl.so 出现 undefined symbol: ssl_cmd_SSLPassPhraseDialog错误解决
  2. 向 Internet Explorer 添加 Google 搜索
  3. linux 下的远程上传命令行,使用scp命令用命令行从服务器上传下载文件
  4. 数学不好的人可以学python吗_哪些人适合学金融工程专业 数学不好能学吗
  5. matlab的7.3版本是什么_MX Linux 19.3 发布,Debian和antiX Linux的混合版本
  6. Android -- Exif
  7. 70.(cesium篇)cesium接入天地图影像与注记(经纬度)
  8. Android开启OTG功能/USB Host API功能
  9. 什么是数字化的马太效应
  10. 华为鸿蒙系统失败,世界首富很无奈,第三大手机系统失败,华为鸿蒙会成功吗...
  11. [Poi2003 ][bzoj 2601]MAL猴子捞月
  12. NOIP200703守望者的逃离
  13. minio数据迁移工具rclone
  14. GitHub爆款项目,去马赛克软件Depix使用
  15. 电脑怎么重装系统?超简单小白一键重装教程
  16. C++重载双目运算符
  17. 程序员之“盲人摸太阳”
  18. 明白的糊涂账 各家单反测光系统全解析
  19. 流浪只是为了更好的浪
  20. Adobe photoshop cc启动后,新建命令不能用,背景黑色的解决方法

热门文章

  1. Android编译Skia库
  2. API 编排的应用及痛点
  3. 输入数字,控制台打印输出大写,如:输入12 ,控制台打印输出:壹拾贰圆
  4. 5 个常用 Python 标准库
  5. 基于python的中证股票分析
  6. JavaScript检查数组中是否有重复值
  7. 诺基亚heif源码 cmake
  8. python解决数学建模发电商机组调度问题
  9. linux系统进程有哪几种主要状态,Linux 进程状态详解
  10. HTTP 常用的方法是什么,各自含义是什么?