Questione : Delfi ha letto le lime enormi nell'bei pezzi ansistring

Ciao - utilizzo 4 procedure MD5 in un programma che funzionano perfettamente: il
#1 - trita una lima - standard
#2 - trita il
#3 di a (copia binaria della lima del rilievo + dell'archivio in obbiettivo) - trita (rilievo + archivio in obbiettivo colto in un ansistring) - un
che è estremamente slow* per le grandi lime. - Leggo il buffers
del blocco 32K ma d'altra parte devo convertire in un carbone ansistring alla volta. Il
vede il mio code.
#4 - tritare la stringa (Memo.text). mezzi estremamente lenti del

* - introiti almeno 10 volte più lungamente di MD5 standard.
(causa non voglio ammettere che prenda 100 volte lunghe). il

If ha fornito lo stessi, nel totale, stringhe di risultato, #2, #3 & #4 che tutti producono l'esatto lo stesso hash, che è preminente - cioè estremamente impotant. Per usare le mie funzioni MD5, devono essere passate ad un nome di schedario o ad un AnsiString.  

In l'estremità, la mia domanda sono, posso leggere rapidamente le lime enormi in direttamente nei bei pezzi ansistring?

TIA - class= " lineNumbers " >
1 del >



: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: class= codeBody " prettyprint " del id= " codeSnippet842380 " del >
 StrBuf, StrBuf2, StrPad: ansistring
       // bufin2 - > allineamento [1..32768] di AnsiChar
       // StrPad è assegnato uno di vari, utente selezionato,
       protocolli anticollisione di //  
          
       ripetizione

          BlockRead (InFile, Bufin2, SizeOf (Bufin2), NumRead);
          BytsRem: = BytsRem - NumRead;
          NBlks: = NBlks + 1;
          StrBuf: = '';          
          se NumRead > 0 allora    
             per K: = 1 a NumRead fa // ** estremamente ritardare per le grandi lime           
                 StrBuf: = StrBuf+AnsiString (Bufin2 [K]);

          se NBlks = 1 allora
             StrBuf2: = AnsiString (StrPad+StrBuf)
           altrimenti
             StrBuf2: = AnsiString (StrBuf2+StrBuf);

          MD5Long: = MD5Hex (MD5Str (StrBuf2));

       fino a (NumRead = 0) o (BytsRem = 0); // o (NBlks = 2);

       Closefile (InFile);

       // ha completato il hash è contenuto in MD5Long
       // per di più, MD5Long è d'accordo esattamente con
       le lime “copiate„ di // binarie tritano - vedere il mio #2.
class= > " libero " di 
class= del

Risposta : Delfi ha letto le lime enormi nell'bei pezzi ansistring

funzione MD5Str (m.: RawByteString): MD5Digest;

Non dovreste dovere convertire in AnsiString quando usando questo. Ottenete un hash differente quando non fate? Non dovreste.
Altre soluzioni  
 
programming4us programming4us