最近用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占用一个字节的位置。