2009-12-01 76 views
4

我有什么作品,但即时寻找,如果有一个字符串是sysutils复制到pByteArray德尔福,复制字符串到字节数组

更快的方法

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

承担一个小号是设置正确

a: pByteArray; 
s: string; 

是有一个快速的方法来做到这一点,即像副本

for i := 1 TO Length(s) - 1 do 
    a^[i] := Ord(s[i]); 

德尔福7

回答

8

小心使用移动。如果您使用的是Delphi 2009,则可能会失败。相反,使用这个:

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

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

+3

如果length(s)为零,则for循环不执行。为了完全等价,你需要添加一个检查长度(s)。添加。 – 2009-12-13 14:35:58

2

没关系,发现它

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

请记住检查长度<= SizeOf(a),否则您有发生缓冲区溢出的风险 - 字符串可能比TByteArray大。 – 2009-12-01 08:27:11

1

我认为你可以使用move过程就像在这个example

2

你可以简单地将它转换:

a := @s[1]; 

相反的方法是:

s := PChar(a); 
+0

这不会复制任何东西,它会使'a'指向某种与其类型不同的东西。 – 2009-12-01 14:47:57

+0

True(我假定其目的是作为字节阵列或副字符访问字符串) – Remko 2009-12-01 21:07:03