DelphiXE3下的字符串

简介: DelphiXE3下的字符串在delphi中,我们常用String来声明字符串.procedure TestStringForDelphi;var   strName: String;   nLenName: Integer;begin  ...

DelphiXE3下的字符


在delphi中,我们常用String来声明字符串.

procedure TestStringForDelphi;
var
   strName: String;
   nLenName: Integer;
begin
   strName := '中国a';
   nLenName := Length(strName);

   ShowMessage('字符串"' + strName +  '"长度为:' + IntToStr(nLenName) +';第一个字符是:' + strName[1]);

end;


1、在Delphi7中显示结果


也就是说在delphi7中,String代表的是AnsiString类型;Length得到的是字符串的字节长度,strName[1]得到的是字符串的第一个字节,因为汉字占用两个字节,所以没有显示“中”这个字符


2、在DelphiXE3中显示结果


也就是说在delphixe3中,String代表的是WideString类型;Length得到的是字符串的字符长度,strName[1]得到的是字符串的第一个字符,想得到字符串的字节长度,可使用System.SysUtils.ByteLength(strName)函数。

我们来看一下ByteLength的实现:

function ByteLength(const S: string): Integer;
begin
  Result := Length(S) * SizeOf(Char);
end;

发现了什么?计算结果是:字符长度*SizeOf(Char),而SizeOf(Char)=2,因为Char类型在DelphiXE3下代表的是WideChar,占用两个字节的空间。


3、DelphiXE3下的字符串流操作

// 将字符串写入流

procedure WriteStringToStream(AStream: TStream; Const AStr: String);
var
  nByteCnt: Integer;
begin
  nByteCnt := ByteLength(AStr);

  AStream.WriteBuffer(nByteCnt, SizeOf(nByteCnt));

  AStream.WriteBuffer(AStr[1], nByteCnt);
end;

// 从流中读取字符串
procedure ReadStringFromStream(AStream: TStream; Var AStr: String);
var
  nByteCnt,
 nCharCnt: Integer;

begin
  AStream.ReadBuffer(nByteCnt, SizeOf(nByteCnt));

  nCharCnt := nByteCnt div 2;

  SetLength(AStr, nCharCnt);

  if nByteCnt > 0 then
    AStream.ReadBuffer(AStr[1], nByteCnt);
end;


4、DelphiXE3下的字符串和字节数组的转换

procedure GetBytesFromString(Value: String);

var
    StrBuf: TBytes;
begin

    StrBuf := System.SysUtils.TEncoding.UTF8.GetBytes(Value);

end;


procedure GetStringFromBytes(Value: TBytes);

var

    str: String;

begin

    Str := System.SysUtils.TEncoding.UTF8.GetString(Value);

end;

相关文章
|
4月前
|
Python
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
本文介绍了Python中的`ord()`和`chr()`函数。`ord()`函数通过字符找到对应的序号,而`chr()`函数则根据序号找到对应的字符。两者互为逆运算,可以相互转换。文章还探讨了单双引号在字符串中的作用,并解释了中文字符和emoji也有对应的序号。最后总结了`ord()`和`chr()`函数的特点,并提供了学习资源链接。
39 4
|
8月前
|
存储 编译器 C语言
C语言程序设计——字符输出函数putchar()
C语言程序设计——字符输出函数putchar()
|
8月前
|
C++
大小写转换——islower/isupper或者tolwer/toupper函数的用法
大小写转换——islower/isupper或者tolwer/toupper函数的用法
68 0
|
8月前
QT去除QString字符串中空格的方法
QT去除QString字符串中空格的方法
276 0
|
开发工具
[oeasy]python0054_三引号_原样显示字符串_triple_quoted
[oeasy]python0054_三引号_原样显示字符串_triple_quoted
139 0
[oeasy]python0054_三引号_原样显示字符串_triple_quoted
|
存储 Unix Shell
[oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear
[oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear
94 0
[oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear
|
存储 机器学习/深度学习 Unix
[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
153 0
[oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话
|
数据采集 开发工具 Python
[oeasy]python0012_字符_character_chr函数_根据序号得到字符
[oeasy]python0012_字符_character_chr函数_根据序号得到字符
134 0
[oeasy]python0012_字符_character_chr函数_根据序号得到字符
内置函数值 -- chr() ord() -- 字符和ascii的转换
chr(i)   Return the string representing a character whose Unicode code point is the integer i. For example, chr(97) returns the string 'a', while chr(8364) returns the string '€'. This is the inverse of ord().   The valid range for the argument is from 0 through 1,114,111 (0x10FFFF in base 16). Valu
171 0
|
PHP
PHP面试题:请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,
PHP面试题:请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,
140 0