Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
3-73986
AndCot
2003-10-01 09:56
2003.10.23
Индексы CDX в TTable


3-74094
uu
2003-10-01 21:47
2003.10.23
Обновление данных в DBGrid


14-74424
ИМХО
2003-10-05 10:02
2003.10.23
Кто помнит песню и исполнителя?


14-74398
Zhouck
2003-10-06 12:39
2003.10.23
Фигня с телетекстом


1-74319
X-Shadow
2003-10-11 21:39
2003.10.23
ActiveX и приложение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский