有没有办法在没有循环的delphi中将字节添加到TIdBytes变量的开头?

时间:2014-05-09 13:50:01

标签: delphi bytearray

我有一个TIdBytes变量myBytesArray,我想在它的开头添加一个字节。我尝试了一个循环(虽然我肯定更喜欢非循环解决方案),但它仍然不起作用:

myBytesArray : TIdBytes;
// ...
len := Length(myBytesArray);
SetLength(myBytesArray, len + 1);
for i := len downto 1 do begin
  myBytesArray[i] := myBytesArray[i-1];
end;
myBytesArray[0] := myNewByte;

2 个答案:

答案 0 :(得分:6)

TIdBytes是Indy数据类型。 Indy在IdGlobal单元中有许多用于操纵TIdBytes的功能,例如InsertByte()

InsertByte(myBytesArray, myNewByte, 0);

答案 1 :(得分:4)

您可以使用索引i而不是len来修复循环:

for i := len downto 1 do 
  myBytesArray[i] := myBytesArray[i-1];

您的代码每次都会在len复制字节。

但是,您可以使用Move过程编写没有循环的版本,如下所示:

SetLength(myBytesArray, len + 1);
if len > 0 then
  Move(myBytesArray[0], myBytesArray[1], len);
myBytesArray[0] := myNewByte;

如果启用了范围检查,则需要if语句。

正如Remy所说,IdGlobal单位已经提供了InsertByte程序所需的功能。

InsertByte(myBytesArray, myNewByte, 0);