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

本文介绍了一个快速内存比较函数,适用于文件和数组内容的比较。通过实例展示了如何使用此函数来高效地比较两个文件或数组内容是否相同。包括静态数组和动态数组的比较方法。
所属单元: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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值