应用场景
有时候一段字节数组,中间一部分是我们不需要的,需要剪切删除掉他。原理是提取头与尾,最后做拼接。
函数代码
function SliceByteArray(const B: array of Byte; Start, Len: Integer):TBytes;
begin
if Start < 0 then
Start := 0;
if Len < 0 then
Len := 0
else if Start >= Length(B) then
Len := 0
else if Start + Len > Length(B) then
Len := Length(B) - Start;
SetLength(Result, Len);
if Len > 0 then
Move(B[Start], Result[0], Len);
end;
procedure AppendByteArray(var B1: TBytes; const B2: array of Byte);
var
OldB1Len: Integer;
begin
if Length(B2) = 0 then
Exit;
OldB1Len := Length(B1);
SetLength(B1, OldB1Len + Length(B2));
Move(B2[0], B1[OldB1Len], Length(B2));
end;
function CloneByteArray(const B: array of Byte): TBytes;
begin
SetLength(Result, Length(B));
if Length(B) > 0 then
Move(B[0], Result[0], Length(B));
end;
function ConcatByteArrays(const B1, B2: array of Byte): TBytes;
begin
Result := CloneByteArray(B1);
AppendByteArray(Result, B2);
end;
function ChopByteArray(const B: array of Byte; Start, Len: Integer):
TBytes;
var
First, Last: TBytes;
begin
if Start < 0 then
Start := 0;
if Len < 0 then
Len := 0
else if Start >= Length(B) then
Len := 0
else if Start + Len > Length(B) then
Len := Length(B) - Start;
First := SliceByteArray(B, 0, Start);
Last := SliceByteArray(B, Start + Len, Length(B));
Result := ConcatByteArrays(First, Last);
end;
测试
procedure TForm1.Button1Click(Sender: TObject);
var
B1, B2: Tbytes;
begin
B1:= BytesOf('123456');
B2:= ChopByteArray(B1, 2, 3);
Caption:= StringOf(B2);
end;
···