zoukankan      html  css  js  c++  java
  • delphi XE的字符串处理

    最近用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编码进行存储。
  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3305505.html
Copyright © 2011-2022 走看看