www.pudn.com > MP4Cam2AVI_SRC_1.2.zip > Buffer.pas
unit Buffer;
interface
uses
Windows;
{$UNDEF UNICODE}
type
PBuffer = ^TBuffer;
TBuffer = array of char;
function DwordToStr(d: integer):string;
function StrToDword(s: string):integer;
function HexNum(c: char):byte;
function DwordReverse(var d: integer):integer;
procedure HexStringToBuffer(var buf: TBuffer; s: string; StartPos: integer);
function BufferToDwordRev(var buf: TBuffer; index: integer):integer;
function BufferToDword(var buf: TBuffer; index: integer):integer;
function BufferToByte(var buf: TBuffer; index: integer):byte;
function BufferToString(var buf: TBuffer; index: integer; count: integer):string;
procedure BufferShiftRight(var buf: TBuffer; count: integer);
procedure BufferShiftLeft(var buf: TBuffer; count: integer; RealSize: integer);
procedure BufferToBuffer(var bufTo, bufFrom: TBuffer; index: integer; count: integer; indTo: integer);
procedure BufferWriteString(var buf: TBuffer; s: string; index: integer);
procedure BufferWriteDword(var buf: TBuffer; d: integer; index: integer);
procedure BufferWriteWord(var buf: TBuffer; d: integer; index: integer);
procedure BufferWriteDwordRev(var buf: TBuffer; d: integer; index: integer);
procedure BufferWriteByte(var buf: TBuffer; b: byte; index: integer);
procedure BufferWriteBuffer(var bufTo, bufFrom: TBuffer; indTo: integer);
function BufferSearchString(var buf: TBuffer; str: string; offs: integer): integer;
function BufferSearchStringRev(var buf: TBuffer; str: string; offs: integer): integer;
function BufferSearchDword(var buf: TBuffer; d: integer; offs: integer): integer;
implementation
function DwordToStr(d: integer):string;
begin
DwordToStr := Chr((d AND $000000FF)) + Chr((d AND $0000FF00) SHR 8) + Chr((d AND $00FF0000) SHR 16) + Chr((d AND $FF000000) SHR 24);
end;
function StrToDword(s: string):integer;
begin
StrToDword := Ord(s[1]) + (Ord(s[2]) SHL 8) + (Ord(s[3]) SHL 16) + (Ord(s[4]) SHL 24);
end;
function HexNum(c: char):byte;
var b: byte;
begin
b := 0;
case c of
'1': b := 1; '2': b := 2; '3': b := 3; '4': b := 4;
'5': b := 5; '6': b := 6; '7': b := 7; '8': b := 8;
'9': b := 9; 'A': b := 10; 'B': b := 11; 'C': b := 12;
'D': b := 13; 'E': b := 14; 'F': b := 15;
end;
HexNum := b;
end;
function DwordReverse(var d: integer):integer;
begin
DwordReverse := ((d SHL 24) AND $FF000000) + ((d SHL 8) AND $00FF0000) + ((d SHR 8) AND $0000FF00) + ((d SHR 24) AND $000000FF);
end;
procedure HexStringToBuffer(var buf: TBuffer; s: string; StartPos: integer);
var i, index: integer;
begin
i := 0;
index := 0;
Repeat
i := i + 1;
if (s[i] <> ' ') and (s[i+1] <> ' ') then
begin
buf[StartPos + index] := Chr(HexNum(s[i]) * 16 + HexNum(s[i+1]));
index := index + 1;
i := i + 1;
end;
until i >= Length(s);
end;
function BufferToDwordRev(var buf: TBuffer; index: integer):integer;
begin
BufferToDwordRev := Ord(buf[index + 3]) SHL 24 + Ord(buf[index + 2]) SHL 16 + Ord(buf[index + 1]) SHL 8 + Ord(buf[index]);
end;
function BufferToDword(var buf: TBuffer; index: integer):integer;
begin
BufferToDword := Ord(buf[index]) SHL 24 + Ord(buf[index + 1]) SHL 16 + Ord(buf[index + 2]) SHL 8 + Ord(buf[index + 3]);
end;
function BufferToByte(var buf: TBuffer; index: integer):byte;
begin
BufferToByte := Ord(buf[index]);
end;
function BufferToString(var buf: TBuffer; index: integer; count: integer):string;
var i: integer;
s: string;
begin
s := StringOfChar(' ', count);
for i := index to index + count - 1 do
begin
s[i - index + 1] := buf[i];
end;
BufferToString := s;
end;
procedure BufferShiftRight(var buf: TBuffer; count: integer);
var i: integer;
begin
for i := Length(buf) - 1 downto count do buf[i] := buf[i - count];
for i := 0 to count - 1 do buf[i] := Chr(0);
end;
procedure BufferShiftLeft(var buf: TBuffer; count: integer; RealSize: integer);
var i: integer;
begin
for i := 0 to RealSize - count - 1 do buf[i] := buf[i + count];
for i := RealSize - count - 1 to RealSize - 1 do buf[i] := Chr(0);
end;
procedure BufferToBuffer(var bufTo, bufFrom: TBuffer; index: integer; count: integer; indTo: integer);
var i: integer;
begin
for i := index to index + count - 1 do
begin
bufTo[i - index + indTo] := bufFrom[i];
end;
end;
procedure BufferWriteString(var buf: TBuffer; s: string; index: integer);
var i: integer;
begin
for i := index to index + Length(s) - 1 do
begin
buf[i] := s[i - index + 1];
end;
end;
procedure BufferWriteDword(var buf: TBuffer; d: integer; index: integer);
begin
buf[index + 3] := Chr(d AND $000000FF);
buf[index + 2] := Chr((d SHR 8) AND $000000FF);
buf[index + 1] := Chr((d SHR 16) AND $000000FF);
buf[index + 0] := Chr((d SHR 24) AND $000000FF);
end;
procedure BufferWriteWord(var buf: TBuffer; d: integer; index: integer);
begin
buf[index + 1] := Chr(d AND $000000FF);
buf[index + 0] := Chr((d SHR 8) AND $000000FF);
end;
procedure BufferWriteDwordRev(var buf: TBuffer; d: integer; index: integer);
begin
buf[index + 0] := Chr(d AND $000000FF);
buf[index + 1] := Chr((d SHR 8) AND $000000FF);
buf[index + 2] := Chr((d SHR 16) AND $000000FF);
buf[index + 3] := Chr((d SHR 24) AND $000000FF);
end;
procedure BufferWriteByte(var buf: TBuffer; b: byte; index: integer);
begin
buf[index] := Chr(b);
end;
procedure BufferWriteBuffer(var bufTo, bufFrom: TBuffer; indTo: integer);
var i: integer;
begin
for i := indTo to indTo + Length(bufFrom) - 1 do
bufTo[i] := bufFrom[i - indTo];
end;
function BufferSearchString(var buf: TBuffer; str: string; offs: integer): integer;
var i: integer;
begin
for i := offs to Length(buf) - Length(str) - 1 do
begin
if (str = BufferToString(buf, i, Length(str))) then
begin
BufferSearchString := i;
Exit;
end;
end;
BufferSearchString := -1;
end;
function BufferSearchStringRev(var buf: TBuffer; str: string; offs: integer): integer;
var i: integer;
begin
for i := offs downto 0 do
begin
if (str = BufferToString(buf, i, Length(str))) then
begin
BufferSearchStringRev := i;
Exit;
end;
end;
BufferSearchStringRev := -1;
end;
function BufferSearchDword(var buf: TBuffer; d: integer; offs: integer): integer;
var i: integer;
begin
for i := offs to Length(buf) - 4 - 1 do
begin
if (d = BufferToDword(buf, i)) then
begin
BufferSearchDword := i;
Exit;
end;
end;
BufferSearchDword := -1;
end;
end.