Ada 2022中字符串长度的单位是什么?相关文档位置咨询
Ada字符串长度单位及相关文档说明
核心结论
- 固定长度字符串(
String类型):长度单位是code points(对应Ada的Character类型,基于ISO Latin-1编码,每个Character对应一个code point,同时也是1字节)。 - 有界字符串(
Bounded_String,来自Ada.Strings.Bounded)和无界字符串(Unbounded_String,来自Ada.Strings.Unbounded):长度单位同样是code points,内部存储基于Character序列,因此每个元素对应一个ISO Latin-1的code point。
依据文档
- Ada参考手册(ARM):
- ARM 3.6.1(字符串类型)明确规定,
String是Character的一维数组,数组的长度即字符串的长度;而Character类型对应ISO/IEC 8859-1(Latin-1)的字符,每个Character是一个独立的code point。 - ARM A.4.5(字符串处理包)中,
Bounded_String和Unbounded_String的Length等长度相关函数,均以Character的数量作为计数标准,也就是code points的数量。
- ARM 3.6.1(字符串类型)明确规定,
- AdaCore官方文档:
Ada.Strings.Unbounded包的说明中,Length函数的返回值定义为字符串中Character元素的个数,直接对应code points的数量。
补充说明
- 固定字符串长度数值上等于字节数,是因为Latin-1编码下每个code point恰好占1字节,这是编码特性导致的巧合,而非长度定义的单位。
- Ada默认字符串类型不支持grapheme clusters(如带组合标记的字符),若需处理这类复杂字符,需使用
Ada.Characters.Handling或Unicode相关处理包(如Ada.Strings.Wide_Wide_Unbounded),此时长度单位对应宽字符的code points。
内容的提问来源于stack exchange,提问作者Wayne
相关产品推荐
相关产品推荐

