我有一个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)
TIdBytes是Indy数据类型.Indy在IdGlobal单元中有许多用于操作的功能TIdBytes,例如InsertByte():
InsertByte(myBytesArray, myNewByte, 0);
Run Code Online (Sandbox Code Playgroud)
您可以使用 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)
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |