delphiXE的字符串处理
最近⽤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编码进⾏存储。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论