2009-12-01 43 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