我有一个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;
答案 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);