delphi XE的字符串处理
2013-09-06 15:09
330 查看
最近用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编码进行存储。
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编码进行存储。
相关文章推荐
- delphi 字符串处理中的怪异现象与处理
- DELPHI 字符串分割处理
- DELPHI 字符串分割处理
- 常用字符串处理函数 Delphi
- XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)
- Delphi中处理字符串,LastDelimiter相当于C#中的LastIndexOf
- 在delphi中判断字符串是否数字,以及精度处理函数
- 【转】Delphi中字符串的处理
- Delphi字符串处理函数
- Delphi字符串处理(下面贴出的是完整的可运行代码)
- Delphi反汇编内部字符串处理函数/过程不完全列表
- 字符串处理【Delphi版】
- DelphiXE下的字符串变化
- delphi中的字符串处理,以及几个字符串类型的说明。
- Delphi高效的字符串处理
- Delphi 字符串中末位是双字节字符的处理(避免最后一位为乱码)
- Delphi字符串处理
- delphixe手势处理流程
- Delphi XE 的字符串理解
- DelphiXE下的字符串变化