您的位置:首页 > 其它

内存比较函数 - CompareMem(文件、数组等比较)

2011-07-30 19:33 537 查看
所属单元:SysUtils

函数功能:快速内存比较函数,可对两个文件比较、数组进行比较。据测试速度比一般算法要高60~110%。

一、文件的比较
你是否遇到过比较两个任意后缀名文件内容是否相同的问题?(TFileStream其他类可以方便的操作这些文件,但如果说到比对内容,恐怕……)

下面就用这个函数快速而简单的比对两个文件内容的是否相同。

procedure TForm1.btn1Click(Sender: TObject);
var
cs1, cs2:TMemorystream;
begin
cs1 := TMemoryStream.Create;
cs2 := TMemoryStream.Create;
try
cs1.LoadFromFile('C:\a.bin');
cs2.LoadFromFile('C:\b.bin');
if (cs1.Size = cs2.Size) and CompareMem(cs1.Memory, cs2.Memory,cs1.Size) then
ShowMessage('文件内容相同')
else
ShowMessage('文件内容不同!');
finally
cs1.free;
cs2.free;
end;
end;

二、比较两个二维数组是否相等(转)
{对比静态数组}
procedure TForm1.btn4Click(Sender: TObject);
var
arr1: array[0..3] of AnsiChar;
arr2: array[0..3] of Byte;
begin
arr1[0] := 'A';
arr1[1] := 'B';
arr1[2] := 'C';
arr1[3] := 'D';
arr2[0] := 65;
arr2[1] := 66;
arr2[2] := 67;
arr2[3] := 68;

if CompareMem(@arr1, @arr2, SizeOf(arr1)) then
ShowMessage('arr1 与 arr2 中的数据相同');
end;

{对比动态数组}
procedure TForm1.btn2Click(Sender: TObject);
var
arr1: array of AnsiChar;
arr2: array of Byte;
begin
SetLength(arr1, 4);
SetLength(arr2, 4);
arr1[0] := 'A';
arr1[1] := 'B';
arr1[2] := 'C';
arr1[3] := 'D';
arr2[0] := 65;
arr2[1] := 66;
arr2[2] := 67;

arr2[3] := 68;
if CompareMem(arr1, arr2, SizeOf(arr1)) then
ShowMessage('arr1 与 arr2 中的数据相同');
end;

{多维数组也一样}

procedure TForm1.btn3Click(Sender: TObject);
var
arr1: array[0..1, 0..1] of AnsiChar;
arr2: array[0..1, 0..1] of Byte;
begin
arr1[0, 0] := 'A';
arr1[0, 1] := 'B';
arr1[1, 0] := 'C';
arr1[1, 1] := 'D';
arr2[0, 0] := 65;
arr2[0, 1] := 66;
arr2[1, 0] := 67;
arr2[1, 1] := 68;

if CompareMem(@arr1, @arr2, SizeOf(arr1)) then
ShowMessage('arr1 与 arr2 中的数据相同');
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐