Delphi,将字符串复制到字节数组

4

我已经有一种方法可以将字符串复制到pByteArray中,但是我想知道是否有更快的方法。

来自sysutils库。

  PByteArray = ^TByteArray;
  TByteArray = array[0..32767] of Byte;

假设as已正确设置。
 a:   pByteArray;
 s:   string;

有没有一种快速的方式来完成这个任务,比如复制粘贴的方式?
  for i := 1 TO Length(s) - 1 do
   a^[i] := Ord(s[i]);

delphi 7

4个回答

9

注意使用Move函数。如果你正在使用Delphi 2009,它可能会失败。相反,使用以下方法:

Move(s[1], a^, Length(s) * SizeOf(Char));

你也可以在SysUtils.pas中使用TEncoding类(仅适用于Delphi 2009/2010++)来执行此任务。


3
如果s的长度为零,for循环不会执行。为了完全等效,您需要添加一个检查语句来判断s的长度是否为零。已添加。 - Marco van de Voort

4
您可以简单地进行强制类型转换:
  a := @s[1];

另一种方式是:
  s := PChar(a);

1
那并没有复制任何东西,并且它使得 a 指向了一个不符合其类型的东西。 - Rob Kennedy
1
真的(我假设目的是访问字符串作为字节数组或反之亦然) - Remko

2

没事了,找到了

 Move(s[1], a^, Length(s));

3
记得检查 Length(s) <= SizeOf(a),否则会有缓冲区溢出的风险 - 字符串可能比 TByteArray 更大。 - user160694

1

我认为你可以像这个示例中一样使用move过程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接