将“ansichar 数组”转换为维护 Chr(0) 的字符串

问题描述 投票:0回答:2

我在数据类型为

ARRAY[0..60] of Ansichar
的变量中有一个文本,其中包含“零Ascii代码”/
Chr(0)

文字如下:
'Robot'#0#0'PosX=25'#0

我想将此文本复制到字符串变量中维护每个字符

以下代码可以编译,但无法按预期工作。

var
  MyText: array[0..60] of Ansichar;
  MyString: string;
begin
  ...
  MyString := MyText;
  ...

执行后变量MyString =

'Robot'
。剩下的绳子被剪掉了。

当我尝试调用字符串例程 (

MyString := Pos(MyText, 0, 20);
) 时,它会通过在第一次出现 Chr(0) 字符时截断字符串来执行相同的操作。

如何将文本转换为字符串,同时保留所有字符?

string delphi type-conversion
2个回答
0
投票

这个循环帮助我解决了问题。

var
  MyText: array[0..60] of Ansichar;
  MyString: string;
  z: integer;
begin
  ...
  MyString := '';
  for z := 0 to 60 do begin
    MyString := MyString + MyText[z];
  end;
  ...

0
投票

还有另一种解决方案:

  MyString := TEncoding.ANSI.GetString(BytesOf(@MyText[0], Sizeof(MyText)));

即使从 AnsiChar 到 Char 的内部转换的循环受到青睐,提前分配字符串也会提供更好的性能:

  SetLength(MyString, 61);
  for z := 0 to 60 do begin
    MyString[z+1] := MyText[z];
  end;
© www.soinside.com 2019 - 2024. All rights reserved.