(delphi11最新学习资料) Object Pascal 学习笔记---第6章第5节( 其他字符串类型 )

6.5 其他字符串类型

​ 虽然字符串数据类型是迄今为止最常见、最常用的字符串表示类型,但 Object Pascal 桌面编译器过去和现在都有多种字符串类型。其中一些类型还可用于移动应用程序,在移动应用程序中,您也可以直接使用 TBytes 来操作单字节表示的字符串,如上一节中描述的示例。

​ 过去使用 Object Pascal 的开发人员可能会有很多基于这些前 Unicode 类型(或直接管理 UTF-8)的代码,但现代应用程序需要完整的 Unicode 支持。此外,虽然有些类型(如 UTF8String)在语言中可用,但它们在 RTL 方面的支持是有限的。建议使用普通的标准 Unicode 字符串。

注解:关于 Object Pascal 移动编译器中缺少 AnsiString 和 UTF8String 等本地类型,已经有很多讨论和批评。在 Delphi 10.1 Berlin 中,UTF8String 类型和低级的 RawByteString 类型被正式重新引入,随后的 Delphi 10.4 也在移动设备上启用了所有桌面字符串类型。值得注意的是,几乎没有其他编程语言拥有一种以上的本地或内置字符串类型。掌握多个字符串类型会更加复杂,可能会产生不必要的副作用(如大量的自动转换调用会降低程序的运行速度),而且维护多个版本的字符串管理和处理函数的成本也很高。因此,除个别情况外,建议将重点放在标准字符串类型或 UnicodeString 上。

6.5.1 UCS4String类型

​ UCS4String 类型是一种有趣但很少使用的字符串类型,所有编译器都支持这种类型。它只是字符串的 UTF-32 表示法,不过是 UTF32Char 元素或 4 字节字符的数组。如前所述,使用这种类型的原因是它可以直接表示所有 Unicode 码点。显而易见的缺点是,这种字符串占用的内存是 UTF-16 字符串的两倍(UTF-16 字符串占用的内存已经是 ANSI 字符串的两倍)。

​ 虽然这种数据类型可以在特定情况下使用,但并不特别适合一般情况。此外,这种类型不支持写时复制,也没有任何真正的系统函数和程序来处理它。

注解:UCS4String 保证每个 Unicode 码点有一个 UTF32Char,但不能保证每个字形或 "可视字符 "有一个 UTF32Char。

6.5.2 旧字符串类型

如前所述,Object Pascal编译器支持一些较旧的传统字符串类型(这些类型从Delphi 10.4开始在所有目标平台上可用)。这些旧字符串类型包括:

  • ShortString类型,对应于原始Pascal语言的字符串类型。这些字符串限制为255个字符,每个字符都是ANSIChar类型。
  • ANSIString类型,对应于长度可变的字符串。这些字符串采用动态分配、引用计数和写时复制技术。这些字符串的大小几乎不受限制(最多可存储 20 亿个字符!)而且,这种字符串类型基于 ANSIChar 类型,可用于移动编译器,即使 ANSI 表示法是 Windows 特有的,而且某些特殊字符可能会根据平台的不同而有不同的处理方式。
  • WideString 类型在表示法上类似于 2 字节 Unicode 字符串,它基于 Char 类型,但与标准字符串类型不同的是,它不使用写时复制(copy-on-write),而且内存分配效率较低。如果你想知道为什么要把它添加到语言中,原因是为了与微软 COM 架构中的字符串管理兼容。
  • UTF8String 是基于可变字符长度 UTF-8 格式的字符串。如前所述,运行库对这种类型的支持很少。
  • RawByteString是一个没有设置编码页的字符数组,系统不会对其进行字符转换(因此在逻辑上类似于 TBytes 结构,但允许进行一些直接的字符串操作,而字节数组目前还不具备这种功能)。这种数据类型很少在系统库外使用。
  • 字符串构造机制允许你定义与特定 ISO 编码页相关联的 1 字节字符串,这是前 Unicode 时代的产物。

​ 再次强调,所有这些字符串类型都可以在桌面编译器上使用,但仅出于向后兼容的原因而提供。目标是在可能的情况下使用Unicode、TEncoding和其他现代字符串管理技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/735262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年【电工(初级)】考试内容及电工(初级)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 电工(初级)考试内容根据新电工(初级)考试大纲要求,安全生产模拟考试一点通将电工(初级)模拟考试试题进行汇编,组成一套电…

Gitlab修改仓库权限为public、Internal、Private

Public(公开):所有人都可以访问该仓库; Internal(内部):同一个GitLab群组或实例内的所有用户都可以访问该仓库; Private(私人):仅包括指定成员的用…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题②

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题② 模块一 私有云(50 分)任务 1 私有云服务搭建(10 分)任务 2 私有云服务运维(25 分)任务 3 私有云运维开发&#xf…

odoo的create, wirte, update 的作用

在Odoo的开发过程中,主要会使用到create、write和update这几个方法来操作数据库中的记录。 create方法: create方法用于创建新的记录。当用户在Odoo的前端界面上填写表单并提交时,相应的Odoo模型(Model)会调用create方法。该方法接…

突破编程_前端_JS编程实例(目录导航)

1 开发目标 目录导航组件旨在提供一个滚动目录导航功能,使得用户可以方便地通过点击目录条目快速定位到对应的内容标题位置,同时也能够随着滚动条的移动动态显示当前位置在目录中的位置: 2 详细需求 2.1 标题提取与目录生成 组件需要能够自…

虚拟机实验环境配置与使用(计算机系统2)

一、 实验目标: 熟悉Linux上C程序的编译和调试工具,包括以下内容: 1. 了解Linux操作系统及其常用命令 2. 掌握编译工具gcc的基本用法 3. 掌握使用gdb进行程序调试 二、实验环境与工件 1.个人电脑 2. Fedora 13 Linux 操作系统 3. gcc…

【Python】牛客网—软件开发-Python专项练习(day1)

1.(单选)下面哪个是Python中不可变的数据结构? A.set B.list C.tuple D.dict 可变数据类型:列表list[ ]、字典dict{ }、集合set{ }(能查询,也可更改)数据发生改变,但内存地址不变 不…

OPCUA 学习笔记:程序模型

无论是边缘控制器,还是PLC 中,除了信息模型之外,还有应用程序,这些程序可能是IEC61131-3 编写的程序,也可能是其它程序开发的可执行程序。 尽管OPCUA 描述模型能力很强,但是它缺乏算法的描述方式。但是OPCU…

YOLOV5 初体验:简单猫和老鼠数据集模型训练

1、前言 前两天,通过OpenCV 对猫和老鼠视频的抽取,提取了48张图片。这里不再介绍,可以参考之前的文章:利用OpenCV 抽取视频的图片,并制作目标检测数据集-CSDN博客 数据的目录如下: 项目的下载见文末 2、制…

MongoDB聚合运算符:$dayOfYear

$dayOfYear返回日期在当年的那一天&#xff0c;值的范围1~366。 语法 { $dayOfYear: <dateExpression> }参数说明&#xff1a; <dateExpression>为可被解析为Date、Timestamp或ObjectID的表达式<dateExpression>也可以是一个文档{ date: <dateExpressi…

【Web】浅聊Java反序列化之Rome——EqualsBeanObjectBean

目录 简介 原理分析 ToStringBean EqualsBean ObjectBean EXP ①EqualsBean直球纯享版 ②EqualsBean配合ObjectBean优化版 ③纯ObjectBean实现版 关于《浅聊Java反序列化》系列&#xff0c;纯是记录自己的学习历程&#xff0c;宥于本人水平有限&#xff0c;内容很水&a…

Linux运维工具-ywtool-README.md

工具下载链接: 2024.2.29(目前最新)-ywtool工具下载链接 提取码&#xff1a;dhzt 目录 README.md备注:未完成:2023.2.18之前2023.1.282023.2.182023.2.202023.3.202023.4.42023.4.172023.5.212023.6.172023.7.152023.7.212023.7.262023.11.82023.11.29-2023.12.82023.12.13-202…

YOLOv5-Openvino-ByteTrack【CPU】

纯检测如下&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv5和YOLOv6代码内容基本一致&#xff01; 全部代码Github&…

类与对象D13

0、什么是类与对象&#xff1a; 类&#xff1a;具有相同特征或者行为的一个群体&#xff1b; 对象&#xff1a;个体 类&#xff1a;模型&#xff08;造对象&#xff09; 对象&#xff1a;模型生出来&#xff08;造出来&#xff09;具体的东西。 1、实例属性和类属性的区别&a…

代码随想录Day43:最后一块石头的重量、目标和、一和零

最后一块石头的重量 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int a : stones){sum a;}int target sum / 2;vector<int> dp(target 1, 0);for(int i 0; i < stones.size(); i){for(int j target; j >…

深入探索时间复杂度:解锁算法性能的关键

在算法的世界里,性能是王道。了解和优化算法的时间复杂度是每个算法工程师的必修课。本篇文章旨在深入探讨时间复杂度的概念、计算方法,以及如何通过时间复杂度来评估算法性能。通过生动的类比和详细的代码示例,我们将一起揭开时间复杂度的神秘面纱,让你轻松掌握这一核心概…

Linux--文件类型与权限

Linux上一切皆文件; 蓝色的是目录文件 Linux不以文件的扩展名来区分文件类型,而是在文件属性中有一列专门记录文件类型. ls -l 可以查看 普通文件:.c .cpp .h .txt .pdf .xls (-) 目录文件:文件夹 (d) 管道文件:用于进程间通信的一种文件 (p) 链接文件:相当于W…

一图看懂Redis持久化机制!

持久化策略 Redis 提供了两种持久化策略&#xff1a; RDB (Redis Database Snapshot) 持久化机制&#xff0c;会在一段时间内生成指定时间点的数据集快照(snapshot) AOF&#xff08;Append Only File&#xff09; 持久化机制&#xff0c;记录 server 端收到的每一条写命令&am…

【开发工具】认识Git | 认识工作区、暂存区、版本库

文章目录 一、Git初识git本质上是一个版本控制器 二、Git的安装 - CentOS三、Git基本操作1. 创建Git本地仓库2. 配置Git3. 认识工作区、暂存区、版本库4. 版本回退5. 撤销修改情况1&#xff1a;对于工作区的代码&#xff0c;还没有add情况二&#xff1a;已经add &#xff0c;但…

OB_GINS学习

OB_GINS学习 组合导航中的杆臂测量加速度计的零偏单位转换受到经纬度以及高程影响的正常重力位的计算公式大地坐标系&#xff08;LBH&#xff09;向空间直角坐标系&#xff08;XYZ&#xff09;的转换及其逆转换导航坐标系&#xff08;n系&#xff09;到地心地固坐标系&#xff…