Pergunta : Delphi leu limas enormes no pedaços ansistring

Olá! - eu uso 4 rotinas MD5 em um programa que trabalham perfeitamente: o
#1 - pica uma lima - o standard
#2 - pica o
#3 da (cópia binária da lima da almofada + da lima de alvo) - pica (lima da almofada + de alvo lida em um ansistring) - um
que seja extremamente slow* para grandes limas. - Eu leio o buffers
do bloco 32K mas por outro lado tenho que converter a um um carvão animal ansistring em um momento. O
considera meu code.
#4 - picar a corda (Memo.text). meios extremamente lentos do

* - tomadas pelo menos 10 vezes mais por muito tempo do que MD5 standard.
(causa que eu não quero admitir que toma 100 vezes tão longas). o

If forneceu o mesmos, no total, as cordas resultantes, #2, #3 & #4 todos produzem o exato a mesma mistura, que é primordial - isto é extremamente impotant. Para usar minhas funções MD5, devem ser passadas a um nome de arquivo ou a um AnsiString.  o

In a extremidade, minha pergunta sou, posso eu rapidamente ler limas enormes em diretamente em pedaços ansistring?

TIA - class= " lineNumbers " >
1 do >



: 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 " do id= " codeSnippet842380 " do >
 StrBuf, StrBuf2, StrPad: ansistring
       // bufin2 - > disposição [1..32768] de AnsiChar
       // StrPad é atribuído um de diversos, usuário selecionado,
       protocolos anticolisão de //  
          
       repetição

          BlockRead (InFile, Bufin2, SizeOf (Bufin2), NumRead);
          BytsRem: = BytsRem - NumRead;
          NBlks: = NBlks + 1;
          StrBuf: = '';          
          se NumRead > 0 então    
             para k: = 1 a NumRead faz // ** retardar extremamente para grandes limas           
                 StrBuf: = StrBuf+AnsiString (Bufin2 [k]);

          se NBlks = 1 então
             StrBuf2: = AnsiString (StrPad+StrBuf)
           mais
             StrBuf2: = AnsiString (StrBuf2+StrBuf);

          MD5Long: = MD5Hex (MD5Str (StrBuf2));

       até (NumRead = 0) ou (BytsRem = 0); // ou (NBlks = 2);

       Closefile (InFile);

       // terminou a mistura é contido em MD5Long
       // mais importante ainda, MD5Long concorda exatamente com
       as limas “copiadas” binárias de // picam - ver meu #2.
class= > " desobstruído " de 
class= do

Resposta : Delphi leu limas enormes no pedaços ansistring

função MD5Str (M: RawByteString): MD5Digest;

Você não deve ter que converter a AnsiString ao usar isto. Você começ uma mistura diferente quando você não faz? Você não deve.
Outras soluções  
 
programming4us programming4us