我在数据类型为
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) 字符时截断字符串来执行相同的操作。
如何将文本转换为字符串,同时保留所有字符?
这个循环帮助我解决了问题。
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;
...
还有另一种解决方案:
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;