主页C++ Builder 资料C++ Builder 参考手册System 字符串AnsiStringBase
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
cmath 数学函数
cstdlib 标准库函数
System 字符串
 • UnicodeString
 • UTF8String
 • TStringList
 • TStrings
 • String
 • AnsiString
 • AnsiStringBase
   · 方法
   · 类型
   · 数据
 • AnsiStringT
 • RawByteString
 • UCS4String
 • WideString
 • EnumToStr
 • FloatToStr
 • FloatToStrF
 • FormatFloat
 • IntToStr
 • UIntToStr
 • IntToHex
 • StrToEnum
 • StrToFloat
 • StrToFloatDef
 • StrToInt
 • StrToIntDef
 • StrToInt64
 • StrToInt64Def
 • StrToUInt64
 • StrToUInt64Def
 • TFloatFormat
 • GetUnicodeCategory
 • IMLangCodePages
 • StringReplace
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
VCL 应用程序
Pictures 图片
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
AnsiStringBase - 字符串模板 AnsiStringT 的父类

属性方法事件类型数据返回 AnsiStringBase 类

类型 描述
public:  
TStringFloatFormat enum TStringFloatFormat { sffGeneral, sffExponent, sffFixed, sffNumber, sffCurrency };
这个枚举类型提供给 FloatToStrF 和 CurrToStrF 方法使用。
sffGeneral 常用的格式。使用定点数或科学计数法,尽可能的生成更短的字符串,去掉小数末尾的 0,仅在必须有的时候才包含小数点。
小数点左面的位数,小于等于要求的精度位数,并且大于 0.00001 的数,会使用定点数方式输出,否则会使用科学计数法。
sffExponent 科学计数法。转换之后的字符串的格式为 "-d.dddE+dddd"
如果是负数,开始字符为减号 “-”,小数点的前面始终有 1 位数,总位数为参数给定的位数。
字符 “E” 的后面始终跟着加号 “+” 或减号 “-”,最后是指数。
sffFixed 定点数。转换之后的字符串的格式为 "-ddd.ddd"
如果是负数,开始字符为减号 “-”,小数点的前面至少有 1 位。
小数点之后的位数为转换函数的参数 digits 给定的值,必须在 0 ~ 18 之间。
如果小数点前面的位数超出了参数给定的精度位数 (超出定点数可以表达的能力),会使用科学计数法。
sffNumber 带千位分隔符的定点数。转换之后的格式为 "-d,ddd,ddd.ddd"
规则与 sffFixed 相同,并且在这个基础上,增加千位分隔符。
sffCurrency 货币格式,用于表示金额值。
格式受 CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator 这几个全局变量的控制,默认的,这些全局变量初始化为 Windows 控制面板里面的地区选项里面的货币格式。小数点后面的位数由转换函数的参数 digits 参数给定,范围在 0 ~ 18 之间。
TStringMbcsByteType enum TStringMbcsByteType { mbSingleByte, mbLeadByte, mbTrailByte };
字节类型,字符串里面每个字节的类型。
mbSingleByte 单字节字符
mbLeadByte 前导字节。双字节字符的前面一个字节,等于字符编码的高 8 位
mbTrailByte 后尾字节。双字节字符的后面一个字节,等于字符编码的低 8 位
注1:四字节字符的顺序是 {前导字节1,后尾字节1,前导字节2,后尾字节2},即两个双字节字符组成一个四字节字符。
     GB18030 编码是通过后尾字节的值来判断是否由两个双字节字符组成一个四字节字符。
注2:前导字节是有规定范围的,都是 0x80 之后的字节值,根据不同的编码,会有具体的取值范围;
     后尾字节可以是任何一个值,包括英文字母、数字和符号等,包括 GBKBIG5 编码都是这样。
     因此,在自己解码的时候要先判断前导字节,然后认为前导字节后面的字节就是后尾字节。
例1:双字节字符集 (DBCS) 的例子 - GBK 编码的例子
例2:多字节字符集 (MBCS) 的例子 - GB18030 编码的例子
protected:  
StrRec #pragma pack(push,1)
struct StrRec
{
#ifdef _WIN64
  int _Padding;
#endif /* _WIN64 */
  unsigned short codePage;
  unsigned short elemSize;
  int refCnt;
  int length;
};
#pragma pack(pop)
字符串信息结构体类型,提供给 GetRec, ElementSize, RefCount, 和 CodePage 方法使用。
codePage 字符串的代码页点此处查看代码页列表
elemSize 每个元素的字节数,对于 ANSI 编码每个元素是 1 个字节
refCnt 引用计数
length 字符串长度,和 s.Length() 相等
在 Data 数据成员指针指向的数据之前的 sizeof(StrRec) 个字节的内容,就是 StrRec 结构体;
就是说,Data 指针并没有指向内存的首地址,而是指向的字符串的第一个字符,
内存的开始部分是 StrRec 结构体,接下来是第一个字符、第二个字符……、字符串结束符。
这个结构体的位置,用程序代码说明,就是:
StrRec &rec = ((StrRec*)s.data())[-1];
如果这段代码还不够清晰,再用另一段同样效果的代码说明一下这个结构体的位置:
char *pStrData = (char *)s.data() - sizeof(StrRec); // 就在 s.data() 之前的 sizeof(StrRec) 个字节
StrRec &rec = *(StrRec *)pStrData; // 这个地址里面的内容引用出来,就是 StrRec 结构体
例:赋值、数据指针、引用计数的测试

属性方法事件类型数据返回 AnsiStringBase 类

◤上一页:方法下一页:数据

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号