Hi - jag använder 4 rutiner MD5 i ett program som fungerar perfekt: #1 - pölsor en spara - standard #2 - #3 för pölsor binärt a (kopiera av vadderar sparar + uppsätta som mål sparar) - pölsor som en ansistring (vaddera + uppsätta som mål sparar läst in i en ansistring) - , som är extremt slow* för stort, sparar. - Jag läser buffers för kvarteret 32K men därefter måste att konvertera till en ansistring en röding i sänder. ser min code. #4 - pölsa (Memo.text) stränger. långsamt hjälpmedel för
* extremt - takes åtminstone 10 tider longer än MD5 standard. (orsaka mig inte önskar att medge den tar 100 så långa tider).
If g samma, i slutsumman som resulterar stränger, #2, #3 & #4 all jordbruksprodukter avkräva samma pölsa, som är paramount - dvs. extremt impotant. Att använda min MD5 fungerar, de måste passeras endera en spara - namnge eller en AnsiString.
In avsluta som är min ifrågasätter är, kan jag snabbt läsa enormt sparar in i direkt in i ansistring en stor bit?
TIA - class= " lineNumbers " >1 för > |
StrBuf, StrBuf2, StrPad: ansistring
// bufin2 - > samling [1..32768] av AnsiChar
// StrPad tilldelas en av flera, den utvalda användaren,
// anti-collision protokoll
repetition
BlockRead (InFile, Bufin2, SizeOf (Bufin2), NumRead);
BytsRem: = BytsRem - NumRead;
NBlks: = NBlks + 1;
StrBuf: = '';
om NumRead > 0 därefter
för K: = 1 till NumRead gör // ** som extremt är långsam för stort, sparar
StrBuf: = StrBuf+AnsiString (Bufin2 [K]);
om NBlks = 1 därefter
StrBuf2: = AnsiString (StrPad+StrBuf)
annars
StrBuf2: = AnsiString (StrBuf2+StrBuf);
MD5Long: = MD5Hex (MD5Str (StrBuf2));
till (NumRead = 0) eller (BytsRem = 0); // eller (NBlks = 2);
Closefile (InFile);
// avslutade pölsa innehålls i MD5Long
// huvudsakligen, MD5Long instämm exakt med
// binärt ”som kopieras, sparar” pölsa - se min #2.
<-/pre>
" klar "
|