You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含Chr(0)的ARRAY[0..60] of Ansichar数组转换为完整字符串?

如何将含ASCII零码的Ansichar数组完整转换为字符串?

你遇到的问题是因为Delphi的字符串(AnsiString/UnicodeString)默认以ASCII零码(Chr(0))作为结束标志,直接赋值时会自动截断到第一个零码位置。要完整保留所有字符,需要绕过这种默认的截断逻辑,直接操作内存或者使用指定长度的构造方法,以下是两种可行方案:

方案1:使用SetString函数(推荐)

SetString可以直接指定字符串的长度和数据源指针,不会因为零码截断内容:

var
  MyText: array[0..60] of Ansichar;
  MyString: AnsiString; // 用AnsiString匹配Ansichar类型,避免编码转换
begin
  // 假设MyText已完成赋值
  SetString(MyString, @MyText[0], Length(MyText));
  // 注:Length(MyText)返回数组总元素数(0..60共61个),如果只需复制前N个字符,替换为N即可
end;

方案2:使用Move内存拷贝

先为字符串分配足够的内存,再直接拷贝数组内容:

var
  MyText: array[0..60] of Ansichar;
  MyString: AnsiString;
begin
  // 先分配与数组长度一致的字符串内存
  SetLength(MyString, Length(MyText));
  // 从数组起始位置拷贝到字符串(注意Delphi字符串索引从1开始)
  Move(MyText[0], MyString[1], Length(MyText));
end;

注意事项

  • 如果你使用的是Delphi 2009及以后版本,默认string是UnicodeString,直接拷贝Ansichar会触发编码转换。建议先转换成AnsiString保留原始字节,之后再根据需求转为UnicodeString。
  • 如果数组并非全部有效(比如你知道实际需要保留的字符数是N),把代码中的Length(MyText)替换为实际的N值,避免拷贝多余的空字符。

内容的提问来源于stack exchange,提问作者Michael Hutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:51:13