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

Vik*_*sov 0 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;
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

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

InsertByte(myBytesArray, myNewByte, 0);
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 5

您可以使用 indexi而不是len:

for i := len downto 1 do 
  myBytesArray[i] := myBytesArray[i-1];
Run Code Online (Sandbox Code Playgroud)

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

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

SetLength(myBytesArray, len + 1);
if len > 0 then
  Move(myBytesArray[0], myBytesArray[1], len);
myBytesArray[0] := myNewByte;
Run Code Online (Sandbox Code Playgroud)

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

正如 Remy 所说,该IdGlobal装置已经提供了您在该InsertByte过程中所需的功能。

InsertByte(myBytesArray, myNewByte, 0);
Run Code Online (Sandbox Code Playgroud)