delphi 将“array of ansichar”转换为保持Chr(0)的字符串

o2g1uqev  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(146)

我在一个数据类型为ARRAY[0..60] of Ansichar的变量中有一个文本,其中包含“Zero Ascii codes”/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)char时截断字符串。

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

ig9co6j1

ig9co6j11#

还有另一种解决方案:

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;
iqih9akk

iqih9akk2#

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

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;
  ...

相关问题