Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

CRC-код файла   Найти похожие ветки 

 
MakNik   (2003-10-09 15:07) [0]

Подскажите, пожалуйста, как получить CRC-код файла? Может у кого есть готовая функция??? Заранее спасибо.


 
HolACost!   (2003-10-09 15:17) [1]

http://algolist.manual.ru/


 
yaJohn   (2003-10-09 15:19) [2]

{
*** CRC 32 Optimized for speed ***
*** by Filip Skalka, fip@post.cz ***
*** August 2002 ***
}

unit CRC32;
interface

function CalculateCRC32(var buffer;const size:longword):longword;
function CalculateCRC32Masked(var buffer;const size:longword):longword;

implementation
uses sysutils;

type
TData=array [0..0] of byte;

const
CRC32Table:array [0..255] of longword=
($00000000,$77073096,$EE0E612C,$990951BA,$076DC419,$706AF48F,$E963A535,$9E6495A3,
$0EDB8832,$79DCB8A4,$E0D5E91E,$97D2D988,$09B64C2B,$7EB17CBD,$E7B82D07,$90BF1D91,
$1DB71064,$6AB020F2,$F3B97148,$84BE41DE,$1ADAD47D,$6DDDE4EB,$F4D4B551,$83D385C7,
$136C9856,$646BA8C0,$FD62F97A,$8A65C9EC,$14015C4F,$63066CD9,$FA0F3D63,$8D080DF5,
$3B6E20C8,$4C69105E,$D56041E4,$A2677172,$3C03E4D1,$4B04D447,$D20D85FD,$A50AB56B,
$35B5A8FA,$42B2986C,$DBBBC9D6,$ACBCF940,$32D86CE3,$45DF5C75,$DCD60DCF,$ABD13D59,
$26D930AC,$51DE003A,$C8D75180,$BFD06116,$21B4F4B5,$56B3C423,$CFBA9599,$B8BDA50F,
$2802B89E,$5F058808,$C60CD9B2,$B10BE924,$2F6F7C87,$58684C11,$C1611DAB,$B6662D3D,
$76DC4190,$01DB7106,$98D220BC,$EFD5102A,$71B18589,$06B6B51F,$9FBFE4A5,$E8B8D433,
$7807C9A2,$0F00F934,$9609A88E,$E10E9818,$7F6A0DBB,$086D3D2D,$91646C97,$E6635C01,
$6B6B51F4,$1C6C6162,$856530D8,$F262004E,$6C0695ED,$1B01A57B,$8208F4C1,$F50FC457,
$65B0D9C6,$12B7E950,$8BBEB8EA,$FCB9887C,$62DD1DDF,$15DA2D49,$8CD37CF3,$FBD44C65,
$4DB26158,$3AB551CE,$A3BC0074,$D4BB30E2,$4ADFA541,$3DD895D7,$A4D1C46D,$D3D6F4FB,
$4369E96A,$346ED9FC,$AD678846,$DA60B8D0,$44042D73,$33031DE5,$AA0A4C5F,$DD0D7CC9,
$5005713C,$270241AA,$BE0B1010,$C90C2086,$5768B525,$206F85B3,$B966D409,$CE61E49F,
$5EDEF90E,$29D9C998,$B0D09822,$C7D7A8B4,$59B33D17,$2EB40D81,$B7BD5C3B,$C0BA6CAD,
$EDB88320,$9ABFB3B6,$03B6E20C,$74B1D29A,$EAD54739,$9DD277AF,$04DB2615,$73DC1683,
$E3630B12,$94643B84,$0D6D6A3E,$7A6A5AA8,$E40ECF0B,$9309FF9D,$0A00AE27,$7D079EB1,
$F00F9344,$8708A3D2,$1E01F268,$6906C2FE,$F762575D,$806567CB,$196C3671,$6E6B06E7,
$FED41B76,$89D32BE0,$10DA7A5A,$67DD4ACC,$F9B9DF6F,$8EBEEFF9,$17B7BE43,$60B08ED5,
$D6D6A3E8,$A1D1937E,$38D8C2C4,$4FDFF252,$D1BB67F1,$A6BC5767,$3FB506DD,$48B2364B,
$D80D2BDA,$AF0A1B4C,$36034AF6,$41047A60,$DF60EFC3,$A867DF55,$316E8EEF,$4669BE79,
$CB61B38C,$BC66831A,$256FD2A0,$5268E236,$CC0C7795,$BB0B4703,$220216B9,$5505262F,
$C5BA3BBE,$B2BD0B28,$2BB45A92,$5CB36A04,$C2D7FFA7,$B5D0CF31,$2CD99E8B,$5BDEAE1D,
$9B64C2B0,$EC63F226,$756AA39C,$026D930A,$9C0906A9,$EB0E363F,$72076785,$05005713,
$95BF4A82,$E2B87A14,$7BB12BAE,$0CB61B38,$92D28E9B,$E5D5BE0D,$7CDCEFB7,$0BDBDF21,
$86D3D2D4,$F1D4E242,$68DDB3F8,$1FDA836E,$81BE16CD,$F6B9265B,$6FB077E1,$18B74777,
$88085AE6,$FF0F6A70,$66063BCA,$11010B5C,$8F659EFF,$F862AE69,$616BFFD3,$166CCF45,
$A00AE278,$D70DD2EE,$4E048354,$3903B3C2,$A7672661,$D06016F7,$4969474D,$3E6E77DB,
$AED16A4A,$D9D65ADC,$40DF0B66,$37D83BF0,$A9BCAE53,$DEBB9EC5,$47B2CF7F,$30B5FFE9,
$BDBDF21C,$CABAC28A,$53B39330,$24B4A3A6,$BAD03605,$CDD70693,$54DE5729,$23D967BF,
$B3667A2E,$C4614AB8,$5D681B02,$2A6F2B94,$B40BBE37,$C30C8EA1,$5A05DF1B,$2D02EF8D);

{function CalculateCRC32(var buffer;const size:longword):longword;
var i:integer;
data:tdata absolute buffer;
begin
result:=0;
for i:=0 to size-1 do result:=(result shr 8) xor (CRC32Table[byte(result) xor data[i]]);
end;}

function CalculateCRC32(var Buffer;const Size:longword):longword;
asm
push esi
push edi
push ebx

mov edi,edx
mov esi,eax
xor ebx,ebx
xor eax,eax

mov ecx,edi
shr ecx,2
jecxz @Rest

@Loop:
mov edx,[esi]

mov bl,al
xor bl,dl
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

mov bl,al
xor bl,dh
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

shr edx,16

mov bl,al
xor bl,dl
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

mov bl,al
xor bl,dh
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

add esi,4

loop @Loop

@Rest:
mov ecx,edi
and ecx,3
jecxz @End

mov bl,al
xor bl,[esi]
shr eax,8
inc esi
xor eax,dword ptr [CRC32table+ebx*4]
loop @Loop

@End:

pop ebx
pop edi
pop esi
end;

{function CalculateCRC32Masked(var buffer;const size:longword):longword;
var i:integer;
data:tdata absolute buffer;
begin
result:=$ffffffff;
for i:=0 to size-1 do result:=(result shr 8) xor (CRC32Table[byte(result) xor data[i]]);
result:=result xor $ffffffff;
end;}

function CalculateCRC32Masked(var Buffer;const Size:longword):longword;
asm
push esi
push edi
push ebx

mov edi,edx
mov esi,eax
xor ebx,ebx
mov eax,$ffffffff

mov ecx,edi
shr ecx,2
jecxz @Rest

@Loop:
mov edx,[esi]

mov bl,al
xor bl,dl
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

mov bl,al
xor bl,dh
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

shr edx,16

mov bl,al
xor bl,dl
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

mov bl,al
xor bl,dh
shr eax,8
xor eax,dword ptr [CRC32table+ebx*4]

add esi,4

loop @Loop

@Rest:
mov ecx,edi
and ecx,3
jecxz @End

mov bl,al
xor bl,[esi]
shr eax,8
inc esi
xor eax,dword ptr [CRC32table+ebx*4]
loop @Loop

@End:

xor eax,$ffffffff

pop ebx
pop edi
pop esi
end;

var s:string;
x:cardinal;

procedure test;
const Size=128*1024*1024;
var data:array of byte;
i:cardinal;
d:tdatetime;
begin
setlength(data,size);
for i:=0 to size-1 do data[i]:=i;
d:=now;
x:=CalculateCRC32(data[0],Size);
s:=formatdatetime("hh:nn:ss;zzz",now-d);
end;

begin
test;
end.



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
6-74367
Dimon
2003-08-28 06:00
2003.10.23
Статистика использования шар на локальном компьютере


4-74518
Pitay
2003-08-19 19:13
2003.10.23
Может кто знает, как эммитировать нажатие кнопки мыши?


3-74019
kostik78ua
2003-10-03 11:26
2003.10.23
Експорт MSSQL->Interbase


14-74425
sniknik
2003-10-05 02:56
2003.10.23
Может кто еще помнит... Dos прерывания, время/система


6-74362
oduvan
2003-08-25 18:59
2003.10.23
бобо ((( idHTTP1.POST(.......) - Неработает!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский