Crc Calcolatrice Online Binario Options


On-line il calcolo CRC e biblioteca Introduzione gratuito su calcoli CRC Ogni volta che i dati digitali vengono memorizzati o interfacciato, potrebbe verificarsi il danneggiamento dei dati. Dall'inizio della scienza informatica, le persone sono state pensando di modi per affrontare questo tipo di problema. Per i dati di serie si avvicinò con la soluzione per collegare un bit di parità per ogni byte inviati. Questo semplice meccanismo di rilevamento funziona se un numero dispari di bit in un byte modifiche, ma un numero di falsi bit in un byte non vengono rilevati dal controllo di parità. Per superare questo problema persone hanno cercato meccanismi sonori matematici per rilevare molteplici falsi bit. Il calcolo CRC o controllo di ridondanza ciclico è stato il risultato di questo. Oggi calcoli CRC sono utilizzati in tutti i tipi di comunicazioni. Tutti i pacchetti inviati tramite una connessione di rete vengono controllate con un CRC. Inoltre, ogni blocco di dati sul vostro hard disk ha un valore CRC collegato ad esso. Moderno mondo dei computer non può fare a meno di questi calcoli CRC. Quindi, consente di vedere il motivo per cui sono così largamente utilizzati. La risposta è semplice, sono potenti, rilevano molti tipi di errori e sono estremamente veloci per calcolare soprattutto quando si utilizzano i chip hardware dedicati. Si potrebbe pensare, che l'utilizzo di una somma di controllo in grado di sostituire i calcoli CRC corretto. E 'certamente più facile da calcolare un checksum, ma checksum non trovare tutti gli errori. Diamo una stringa di esempio e calcolare un byte di checksum. La stringa di esempio è Lammert, che converte in ASCII valori 76. 97. 109. 109. 101. 114. 116. Il checksum un byte di questa matrice può essere calcolato sommando tutti i valori, rispetto dividendolo per 256 e mantenendo il resto. Il checksum risultante è 210. È possibile utilizzare la calcolatrice qui sopra per verificare questo risultato. In questo esempio abbiamo usato un lungo checksum un byte che ci dà 256 valori diversi. Utilizzando una checksum due byte si tradurrà in 65.536 possibili valori checksum diversi e quando viene utilizzato un valore quattro byte ci sono più di quattro miliardi valori possibili. Potremmo concludere che con un checksum quattro byte la possibilità che accidentily non vengono rilevati da un errore è minore di 1 o 4 miliardi. Sembra piuttosto buona, ma questa è solo teoria. In pratica, i bit non cambiano puramente casuali durante le comunicazioni. Essi spesso non riescono a raffica, oa causa di picchi elettrici. Supponiamo che nel nostro esempio array viene impostato il bit significativo più basso del carattere L, e il bit significativo più basso di Charcter un è perso durante la comunicazione. Il ricevitore di vedere la matrice 77. 96. 109. 109. 101. 114. 116 che rappresenta la stringa Mmmert. Il checksum per questa nuova stringa è ancora 210. ma il risultato è ovviamente sbagliato, solo dopo due bit cambiati. Anche se avessimo usato una lunga checksum quattro byte non avremmo rilevato questo errore di trasmissione. Quindi calcolare un checksum può essere un metodo semplice per rilevare errori, ma doesnt dare molto più protezione che il bit di parità, indipendente dalla lunghezza del checksum. L'idea alla base di un calcolo valore di controllo è semplice. Utilizzare una funzione F (bval, cVal) che immette un byte di dati e un valore di controllo ed emette un valore di controllo ricalcolato. Nei calcoli di checksum realtà come sopra descritto può essere definita in questo modo. Il nostro esempio di checksum un byte avrebbe potuto essere calcolato con la seguente funzione (in linguaggio C), che noi chiamiamo più volte per ogni byte nella stringa di input. Il valore iniziale per cVal è 0. L'idea alla base di calcolo CRC è quello di guardare i dati come un grande numero binario. Questo numero è divisa da un certo valore e il resto del calcolo è chiamato il CRC. Dividendo nel calcolo CRC in un primo momento sembra a costare un sacco di potenza di calcolo, ma può essere eseguita molto velocemente se si usa un metodo simile a quello imparato a scuola. Noi come esempio calcoliamo il resto per il personaggio m mdashwhich è 1.101.101 in binario notationmdashby dividendolo per 19 o 10011. Si prega di notare che il 19 è un numero dispari. Ciò è necessario, come vedremo più avanti. Si prega di fare riferimento ai libri di scuola come il metodo di calcolo binario qui non è molto diverso dal metodo decimale avete imparato quando eri giovane. Si potrebbe guardare solo un po 'strano. Anche notazioni differiscono da paese a paese, ma il metodo è simile. Con calcoli decimali è possibile verificare velocemente che 109 diviso per 19 dà un quoziente di 5 con 14 come il resto. Ma quello che vediamo anche nello schema è che ogni bit in più per controllare la costa solo un confronto binario e nel 50 dei casi una sottrazione binario. Si può facilmente aumentare il numero di bit di esempio, i dati di test stringmdashfor a 56 bit se usiamo il nostro valore esempio Lammert mdashand il risultato può essere calcolato con 56 confronti binari e una media di 28 sottrazioni binarie. Ciò può essere implementato in hardware direttamente con pochissime transistori coinvolti. Anche algoritmi software possono essere molto efficiente. Per i calcoli CRC, nessuna sottrazione normale viene utilizzato, ma tutti i calcoli sono fatti modulo 2. In tale situazione si ignorano i bit di carry e in effetti la sottrazione sarà pari ad un esclusivo o il funzionamento. Questo sembra strano, il resto risultante ha un valore diverso, ma da un punto di vista algebrico la funzionalità è uguale. Una discussione di questo avrebbe bisogno di conoscenze di livello universitario di teoria dei campi algebrica e credo che la maggior parte dei lettori non sono interessati a questo. Si prega di guardare alla fine di questo documento per i libri che trattano questo in dettaglio. Ora abbiamo un metodo di calcolo CRC che è implementabile sia in hardware e software e ha anche una sensazione più casuale di calcolo di una somma di controllo ordinario. Ma come sarà eseguire in pratica quando uno o più bit sono sbagliate Se scegliamo la divisormdash19 nel nostro examplemdashto essere un numero dispari, non avete bisogno di matematica di alto livello per vedere che verrà rilevato ogni errore singolo bit. Questo perché ogni singolo bit di errore farà si che il cambiamento dividendo con una potenza di 2. Se per esempio bit n cambia da 0 a 1, il valore del dividendo aumenterà con 2 n. Se le altre modifiche n bit mano da 1 a 0, il valore del dividendo diminuirà con 2 n. Perché non puoi dividere qualsiasi potenza di due da un numero dispari, il resto del calcolo CRC cambierà e l'errore non passerà inosservato. La seconda situazione che vogliamo rilevare è quando due bit singolo cambiamento nei dati. Ciò richiede po 'di matematica che possono essere letti in Tanenbaums libro di cui qui di seguito. È necessario selezionare il divisore con molta attenzione per essere sicuri che indipendentemente dalla distanza tra i due bit errati sarete sempre li rilevare. E 'noto, che i valori comunemente utilizzati 0x8005 e 0x1021 dei calcoli CRC16 e CRC-CCITT si comportano molto bene a questo problema. Si prega di notare che altri valori potrebbe o non potrebbe, e non si può calcolare facilmente quale valore divisore è appropriato per rilevare due errori di bit e che costerà. Contare su vasta ricerca matematica su questo tema fatto alcuni decenni fa dai matematici altamente qualificati e utilizzare i valori ottenuti queste persone. Inoltre, con il nostro calcolo CRC vogliamo rilevare tutti gli errori in cui un numero dispari di modifiche bit. Ciò può essere ottenuto utilizzando un divisore con un numero pari di bit impostati. Utilizzando modulo 2 matematica si può dimostrare che vengono rilevati tutti gli errori con un numero dispari di bit. Come ho detto prima, nel modulo 2 matematica la funzione di sottrazione è sostituito dal esclusiva o. Ci sono quattro possibili operazioni XOR. Vediamo che per tutte le combinazioni di valori di bit, il oddness dell'espressione rimane la stessa. Quando scegliendo un divisore con un numero pari di bit impostati, la peculiarità del resto è uguale alla oddness del di godimento. Pertanto, se la oddness delle modifiche dividendo perchè un numero dispari di bit modifiche, il resto cambierà. Quindi tutti gli errori che cambiano un numero dispari di bit vengono rilevati da un calcolo CRC che viene eseguito con tale divisore. Potreste aver visto che il divisore comunemente usato valori 0x8005 e 0x1021 in realtà hanno un numero dispari di bit, e nemmeno come indicato qui. Questo perché all'interno l'algoritmo c'è un po 'più nascosto 2 16 che rende l'effettivo utilizzato 0x18005 valore divisorio e 0x11021 all'interno l'algoritmo. Ultimo ma non meno importante che vogliamo rilevare tutti gli errori a raffica con il nostro calcolo del CRC con una lunghezza massima da rilevare, e tutti gli errori più a raffica da rilevare con un'alta probabilità. Un errore di burst è abbastanza comune nelle comunicazioni. E 'il tipo di errore che si verifica a causa di un fulmine, commutazione a relè, ecc dove durante un piccolo periodo tutti i bit sono impostati a uno. Per capire davvero questo è anche necessario avere una certa conoscenza del modulo 2 algebra, quindi si prega di accettare il fatto che con un 16 bit divisore si sarà in grado di rilevare tutti i scoppia con una lunghezza massima di 16 bit, e tutte le raffiche più lunghe con almeno 99.997 certezza . In un approccio matematico puro, il calcolo CRC viene svalutato come calcoli polinomiali. Il valore divisorio non è più spesso descritto come un numero binario, ma un polinomio di certo ordine. Nella vita normale alcuni polinomi sono utilizzati più spesso di altri. I tre utilizzati nel calcolo CRC on-line in questa pagina sono la vasta CRC16 16 bit e CRCCCITT e l'ampia CRC32 32 bit. Quest'ultimo è probabilmente la più utilizzata ora, perché tra l'altro è il generatore CRC per ogni verifica traffico di rete e validazione. Per tutti e tre i tipi di calcoli CRC ho una libreria software libero disponibile. Il programma di test può essere utilizzato direttamente per testare file o stringhe. È inoltre possibile guardare i codici sorgente e integrare queste routine CRC nel proprio programma. Si prega di essere consapevoli dei valori di inizializzazione del calcolo CRC ed eventuale post-elaborazione necessaria come sfogliando bit. Se non fare questo si potrebbe ottenere risultati diversi rispetto alle altre implementazioni CRC. Tutto questo trattamento pre e post è fatto nel programma di esempio e quindi dovrebbe essere di non difficile fare il proprio lavoro implementazione. Un test usato comune è quello di calcolare il valore CRC per la stringa ASCII 123456789. Se l'esito della vostra routine corrisponde l'esito del programma di test o l'esito su questo sito, l'implementazione sta lavorando e compatibile con la maggior parte delle altre implementazioni. Proprio come riferimento le funzioni polinomiali per i calcoli più comuni CRC. Si ricorda che il termine di ordine più alto della polynomal (x 16 o 32 x) non è presente nella rappresentazione numero binario, ma implicito lo stesso algoritmo. funzioni polinomiali per comune CRCsDr.-Ing. K. Gorontzi, 2005 I bit di ingresso vengono spostati nella porta XOR molto di sinistra. Il MSB (bit più a sinistra) di ogni byte è spostato in prima. Ogni flipflop rappresenta un singolo bit di uscita CRC. Il flip-flop più a sinistra è il MSB del CRC. Questa implementazione non ha bisogno di aumentare il messaggio di input di serie con gli zeri. Si noti che nel nostro caso i flip-flop vengono abbattute per zero all'inizio di ogni calcolo CRC. Una semplice implementazione Verilog del polinomio di cui sopra è mostrato qui. È possibile copiare direttamente il frammento di fonte al codice (distribuito sotto licenza LGPL): una semplice implementazione C del polinomio di cui sopra è mostrato nel seguente codice. Anche in questo caso, è possibile copiare direttamente il frammento di fonte al codice (distribuito sotto licenza LGPL): Naturalmente, il software è fornito qui come è senza alcuna garanzia espressa o implicita a tutti. Lei ritiene che questa pagina in qualche modo utile per favore mi mandi una nota via contact. Purpose Lo scopo del CRCCalculator è quello di visualizzare interattivamente i valori CRC-16 e CRC-32 per una stringa o file specificato. (I valori CRC-32 corrisponderanno a quelli calcolati da PKZIP.) File aggiuntivi, CRC16Dem e CRC32Dem. mostrerà come creare un programma a riga di comando per calcolare i valori CRC. Un programma a riga di comando quotCquot è inoltre disponibile. Materiali e attrezzature Requisiti software per Windows 95982000 e Delphi 34567 (ricompilare) o Linux e Kylix 3 (ricompilare) Requisiti hardware VGA Doppio click sull'icona CRCCalculator. EXE per avviare il programma (Windows), o eseguire il programma sotto Linux usando. CrcCalculator .. Inserire il testo nella casella di modifica. Osservare i valori CRC-16 e CRC-32 in decimale o esadecimale. Selezionare tabsheet file. Fare clic sul pulsante Read e selezionare un file Osservare i valori CRC-16 e CRC-32 in decimale o esadecimale. Valori attesi valori esadecimali non cambiano da versione di Delphi, ma i valori decimali sono destinati ad essere firmato. CRC-16 valori sono sempre stati non firmato, ma dal momento che non vi era alcuna 4 byte intero senza segno D1-D3, i valori decimali vengono firmato per la CRC-32 fino a quando la versione di Delphi 4. Vedi la discussione InitializationFinalization sotto per una descrizione di inizializzazione metodi 1 e 2. Vedere Felipe Rocha Machados commenti sulla stampa di interi a 32 bit in D3. Il CRC-32s dei file abcLower. TXT. ABCupper. TXT. e ThisIsAString. TXT nel file CRCDelphi. ZIP corrisponde ai valori di cui sopra, che sono anche verificate nel programma CRC32Dem. PAS riga di comando: CRC-32 byte F ilename -------- -------- ------------------------ 352441C2 3 abcLower. TXT A3830348 3 ABCUpper. TXT valori 0876633F 16 ThisIsAString. TXT Discussione CRC, in particolare il CRC-32, sono estremamente buon metodo per verificare l'integrità di un file. Se il CRC-32 per un file rimane lo stesso, c'è solo una piccolissima probabilità che il file è stato modificato - circa 1 a 4 miliardi. CRC potrebbero essere utilizzati come strumento di verifica preliminare per trovare file identici. Se i CRC di due file non corrispondono, il file non sono gli stessi. Questo potrebbe anche essere usato per confrontare i file di immagine. Le tabelle di ricerca. Il metodo quothardwarequot di CRC computing comporta manipolazioni bit, che è molto inefficiente per un calcolo del software. Invece di calcolare il bit-by-bit CRC, una tabella di ricerca 256 elementi può essere usato per eseguire l'equivalente di 8 operazioni bit alla volta. (Questo è descritto in quotByte-saggio CRC Calculationsquot in IEEE Micro. Giugno 1983 pp. 40-50). Per un CRC-16, la tabella di ricerca consiste di 256 parole di 2 byte (vedi sotto, o l'unità CRC16.PAS per la tavola reale, o il programma CRCTable per il calcolo della tabella di ricerca per l'x 16 x 15 x 2 1 polinomio generatore): tavolo CONST: ARRAY0..255 dI PAROLA (0000, C0C1, C181,0140, C301,03C0, 0280, C241, C601,06C0,0780, C741,0500, C5C1, C481,0440, CC01,0CC0,0D80, CD41,0F00, CFC1, CE81,0E40,0A00, CAC1, CB81,0B40, C901,09C0,0880, C841, D801, 18C0,1980, D941,1B00, DBC1, DA81,1A40,1E00, DEC1, DF81,1F40, DD01,1DC0,1C80, DC41,1400, D4C1, D581,1540, D701,17C0,1680, D641, D201,12C0,1380, D341,1100, D1C1, D081,1040, F001,30C0, 3180, F141,3300, F3C1, F281,3240,3600, F6C1, F781,3740, F501, 35C0,3480, F441,3C00, FCC1, FD81,3D40, FF01,3FC0,3E80, FE41, FA01,3AC0,3B80, FB41,3900, F9C1, F881,3840,2800, E8C1, E981, 2940, EB01,2BC0,2A80, EA41, EE01,2EC0, 2F80, EF41,2D00, EDC1, EC81,2C40, E401,24C0,2580, E541,2700, E7C1, E681,2640,2200, E2C1, E381,2340, E101,21C0,2080, E041, A001,60C0,6180, A141, 6300, A3C1, A281,6240,6600, A6C1, A781,6740, A501,65C0,6480, A441,6C00, ACC1, AD81,6D40, AF01,6FC0,6E80, AE41, AA01,6AC0, 6B80, AB41, 6900, A9C1, A881,6840,7800, B8C1, B981,7940, BB01, 7BC0,7A80, BA41, BE01,7EC0,7F80, BF41,7D00, BDC1, BC81,7C40, B401,74C0,7580, B541,7700, B7C1, B681,7640,7200, B2C1, B381, 7340, B101,71C0,7080, B041,5000,90C1,9181,5140,9301,53C0, 5280,9241,9601,56C0,5780,9741,5500,95C1, 9481,5440,9C01, 5CC0,5D80,9D41,5F00,9FC1,9E81,5E40,5A00,9AC1,9B81,5B40, 9901,59C0,5880,9841,8801,48C0,4980,8941,4B00,8BC1,8A81, 4A40,4E00,8EC1,8F81,4F40,8D01,4DC0,4C80,8C41,4400,84C1, 8581,4540,8701,47C0,4680,8641,8201,42C0,4380,8341,4100, 81C1,8081,4040) Data la tabella di ricerca sopra, il codice per il calcolo di CRC-16 è il seguente (vedi initializationfinalization sotto): PROCEDURA CalcCRC16 (p: PBYTE nbyte: PAROLA VAR CRCvalue: WORD) var i: PAROLA q: PBYTE l'algoritmo è il seguente: 1. il byte di ingresso con il byte di ordine inferiore del CRC esclusivo o registrati per ottenere un indice 2. spostamento del registro CRC otto bit verso destra 3. esclusivo o il CRC registri con il contenuto della TableINDEX 4. ripetere i punti 1 a 3 per tutti i byte BEGIN q: p FOR i: 1 a nBYTE cominceranno CRCvalue: Hi (CRCvalue) XOR tabella q XOR lo (CRCvalue) INC (q) END END per un CRC-32, la tabella di ricerca è costituito da 256 DWORD 4 byte (si veda anche l'unità CRC32.PAS). Le costanti qui sono per il CRC-32 polinomio generatore, come definito nel Microsoft Systems Journal, Marzo 1995, pp 107-108 tavolo CONST:. ARRAY0..255 DI DWORD (00000000, 77.073.096, 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, 72.076.785, 05.005.713, 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) Data la tabella di ricerca sopra, il codice per il calcolo di CRC-32 è il seguente (vedi initializationfinalization sotto): Utilizzare CalcCRC32 come una procedura in modo CRCValue può essere passato in, ma anche restituito. Ciò consente a più chiamate al CalcCRC32 per la quotsamequot CRC-32 calcolo. PROCEDURA CalcCRC32 (p: puntatore ByteCount: DWORD VAR CRCValue: DWORD) Il seguente è un po 'criptico (ma esegue molto rapidamente). L'algoritmo è il seguente: 1. esclusivo o il byte di ingresso con il byte di ordine inferiore del CRC registrati per ottenere un indice 2. Mettere il registro CRC otto bit a destra registrare 3. esclusivo, o il CRC con il contenuto di TableINDEX 4. ripetere i passaggi da 1 a 3 per tutti i byte var i: DWORD q: bYTE BEGIN q: p FOR i: 0 a ByteCount-1 DO BEGIN CRCvalue: (CRCvalue SHR 8) XOR Tabella q XOR (CRCvalue E 000000ff) INC (q) END END è possibile passare quasi ogni argomento di questa routine da quando il primo parametro è un puntatore. Per una stringa, passare l'indirizzo del primo carattere, per esempio: CalcCRC32 (Ind (S1), LUNGHEZZA (s), CRC32) Per evitare una violazione di accesso in Delphi 4 (o successivo) assicurarsi Lunghezza (s) gt 0. (Im non sicuro perché Delphi 3 non ha ancora lamentano.) Questa routine può essere utilizzato per verificare la tabella di CRC32 di costanti non è stato modificato accidentalmente. Il seguente codice nella centralina di inizializzazione CRC32 controlla la matrice di 1024 byte DWORD: VAR CRC32Table: DWORD BEGIN Verificare la tabella utilizzata per calcolare il CRC non è stato modificato. Grazie a Gary Williams per questo suggerimento, gennaio 2003. CRC32Table: FFFFFFFF CalcCRC32 (Ind (table0), sizeof (tabella), CRC32Table) CRC32Table: NON SE CRC32Table CRC32Table lt 6FCF9E13 ALLORA ShowMessage (CRC32 CRC32 tabella è IntToHex (Crc32Table, 8) , aspettandosi 6FCF9E13) END. Per calcolare lo stesso CRC-32 usati nel programma di utilità PKZIP, iniziare con una CRCvalue di FFFFFFFF. Dopo aver chiamato CalcCRC32 sopra (qualsiasi numero di volte), la messa a punto consiste in un complemento 1s del CRCvalue. Questo può essere calcolata con l'espressione non CRCvalue in Delphi. Vedi ulteriori dettagli nella sezione successiva. Inizializzazione e finalizzazione. L'inizializzazione e finalizzazione del calcolo CRC sono arbitrari. Molti anni fa, quando ho iniziato a CRC calcolo, ho impostato il valore iniziale di 0 e di fatto senza finalizzazione - questo è quotMethod 1quot sopra descritta sotto Valori attesi. CRC16: 0 SE violazione di accesso LUNGHEZZA (s) 0 Evitare in D4 ALLORA CalcCRC16 (Ind (S1), LUNGHEZZA (s), CRC16) Il quotstandardquot CRC-32 (quello usato da PKZIP) inizia con FFFFFFFF come valore iniziale e poi esegue un complemento 1s per produrre valore finale - questo è quotMethod 2quot sopra descritta sotto valori attesi. Ecco ciò che viene fatto nel calcolatore CRC per CRC-32s: CRC32: FFFFFFFF Per abbinare PKZIP SE violazione di accesso LUNGHEZZA (s) gt 0 Evitare in D4 ALLORA CalcCRC32 (Ind (S1), LUNGHEZZA (s), CRC32) CRC32: NON CRC32 per abbinare PKZIP nel calcolo CRC16 il valore iniziale è FFFF con Metodo 2. Grazie a Rolf Gebhardt e Glen Harman per sottolineare una contraddizione su come la messa a punto è stata gestita in una versione precedente di questo articolo. CRC di un file. Tutti i byte di un file devono essere passati alle routine CalcCRC, cioè CalcCRC16 e CalcCRC32, per calcolare il CRC di un file. Il più vecchio BlockRead IO primitiva viene utilizzato nella routine CalcFileCRC16 nell'unità CRC16 da BlockRead ad un certo punto era l'unico modo per leggere un flusso binario di byte. CalcFileCRC32 utilizza il flusso di memoria più contemporaneo per leggere i byte di un file (quando si definisce la compilazione condizionale StreamIO). Utilizzare MemoryStream leggere il file in modalità binaria. PROCEDURA CalcFileCRC32 (FromName: STRING VAR CRCvalue: DWORD VAR TotalBytes: errore TInteger8 VAR: WORD) VAR Stream: TMemoryStream BEGIN errore: 0 CRCValue: FFFFFFFF Stream: TMemoryStream. Create Prova Prova Stream. LoadFromFile (FromName) SE Stream. Size 0 THEN CalcCRC32 (Stream. Memory, Stream. Size, CRCvalue) TRANNE ON E: EReadError DO errore: 1 END CRCvalue: TotalBytes NON CRCvalue: Stream. Size finalmente fine Stream. Free terminare la procedura di cui sopra presuppone che il file entrerà facilmente nella memoria in un TMemoryStream. Purtroppo, questo può essere una cattiva ipotesi soprattutto quando alcuni file sono più grandi di memoria fisica. Ad esempio, l'elaborazione di un file di 1 GB in un flusso di memoria con solo 512 MB di memoria fisica potrebbe al minimo si imposta l'elaborazione della memoria virtuale del sistema operativo. Per ora, questo non è un gran problema. Programma FileCheck. Si rimanda alla Relazione FileCheck Lab per informazioni sulla creazione di CRC dei file, directory o addirittura interi volumi. (QuotMetaquot CRC - cioè, CRC di CRC di una lista ordinata di file -. Utilizzati per rilevare i cambiamenti nella directory o volumi disco integrali) di comando programmi da linea. Gli esempi della riga di comando, CRC16Dem e CRC32Dem possono essere compilati da una finestra DOS (supponendo che il percorso contiene la directory bin Delphi) immettendo: DCC32 CRC16Dem. PAS o DCC32 CRC32Dem. PAS studio i programmi da linea di comando CRC16Dem e CRC32Dem per un modo per calcolare CRC senza interfaccia di Windows. Il CD di installazione di Delphi ha una CRC32.C file, che mostra come calcolare CRC-32s, così come la tabella di ricerca, nella directory InfoExtrasZlibSrc. unità di Peter Haas Delphi per il calcolo dimostrazione di CRC, sulla base del documento: quota indolore Guida al CRC Error Detection Algorithmsquot ftp: ftp. rocksoftpaperscrcv3.txt unità Peter Haas contiene le funzioni per calcolare un CRC arbitrario (fino a 32 bit) per determinati parametri ( polinomio, Init, XorOut, reflectin, ReflectOut). Un altra parte è la generazione di una tabella di ricerca e il calcolo con questa tabella. L'unità può anche utilizzato per trovare i parametri per una sconosciuta calcolo del CRC con tentativi ed errori. Ultimo ma non meno importante, contiene l'unità di una funzione, che crea sorgente Delphi per calcolare un CRC con i parametri indicati in un'applicazione separata. delphi. pjh2.deunitsdownloadCRCs. zip quotFor l'Amore del Gamequot da Michael Barr, sistemi embedded di programmazione. Dicembre 1999, pp. 47-54. embeddedinternet99129912connect. htm quotSlow e costante non ha mai perso la Racequot da Michael Barr, sistemi embedded di programmazione. Gennaio 2000, pp. 37-46. Mostra come calcolare tabella di ricerca CRC. embeddedinternet00010001connect. htm Il CRC Pitstop è un repository di informazioni su CRC e altri algoritmi di controllo rosscrc CRC - Der Cyclic Redundancy codice (in tedesco) informatik. uni-frankfurt. de Robert Lees codice ottimizzato per il calcolo CRC: optimalcodeexcrc. zip Steve Schafers UseNet Messaggio mostrando calcolo del CRC-32 Tabella di ricerca Bjrn Kriedemanns UseNet Messaggio con CRC unità dall'aprile 1997 DDJ: CRC16, XYZModemCRC16, CRC32 Lars Truijenss UseNet post mostrando il codice Delphi per XModem CRC-16 (X 16 X 12 X 5 1) con una tabella di ricerca un calcolatore Unità CRC offre tre funzioni di velocità ottimizzato per calcolare (o continuare il calcolo di) un controllo di ridondanza ciclico (CRC). Applicabile a protocollo XModem (16-bit CRC), SEA quotARCquot utilità, PKZip (CRC a 32 bit) e molti altri software compatibile, delphi. icm. edu. plftpd10freecrc. zip. SWAG (Software Archive Gruppo CRC) Snipets: Include varie routine di CRC e il checksum gdsoftswagdownloads. html gdsoftswagcrc. zip (richiede programma quot quotReader per vederlo) quotCalculating CRC Checksum in Cquot di Colin Mahoney nel giugno 1999 CC Utenti Journal. Algoritmi Alfresco: Whirlpool (CRC algoritmi), Julian Bucknall dipana CRC, Delphi Magazine. Numero 48, agosto 1999. dividere e unire (usare CRC per verificare copia è corretta dopo che un file viene suddiviso in file floppy-size separati e poi ricongiunto) unduArticles010511d. html Il D7 quotCompanion Toolsquot (Disco 1) ha un nagsoftwaresolutionscrc32library directory con un CRC32 file exe da NAG Software Solutions. Vedere la Libreria CRC32 su CD 1 degli strumenti di Companion Delphi Studio. Controllare cifre (carte di credito e il quotModulo 10quot controllare algoritmo cifre) delphiforfun. orgProgramsCheckdigits. htm letteratura Utile: quotProcedure per il calcolo CRC-32 valori, quot Microsoft Systems Journal. Marzo 1995, pp. 107-108. quotByte-saggio CRC Calculationsquot da Aram Perez in IEEE Micro. Giugno 1983, pp. 40-50. Mostra come creare una tabella di ricerca che è il modo migliore per attuare nel software (contro i cambiamenti che si fanno quando implementato in hardware). quota Tutorial su CRC Computationsquot da Tenkasi V. Ramabadran e Sunil S. Gaitonde in IEEE Micro. Agosto 1988, pp. 62-75. Controlli quotCyclic ridondanza per l'integrità dei dati o Identityquot di William H. Premere e Saul A. Teukolsky, Computer in Fisica. JulAug 1989, pp. 88-91. Altri polinomi standard: CRC-16 contrario: x 16 x 14 x 1 1 SDLC inversa: x 16 x 11 x 4 1 CRC-12: x 12 x 11 x 3 x 2 x 1 1 Conclusioni valori CRC, in particolare il CRC-32 , sono estremamente buon modo per verificare l'integrità di una stringa o un file. Parole Cyclic Redundancy Check, CRC-16, CRC-32, APPTYPE CONSOLE, tabella di ricerca, XOR, Comp, Int64, IntToHex, Ind, Delphi, Kylix CLX (libreria di componenti per Cross-Platform - Windows o Linux) Kylix 3 Fonte e CrcCalculator eseguibile: CRCCLX. tar. gz In Linux per estrarre i file: gunzip lt CRCCLX. tar. gz tar xvf - VCL (Visual Component Library - solo Windows) Delphi 2 - 6 Fonte e EXE (234 KB): CRCDelphi. ZIP ( vecchia versione) Borland C 5.02 quotCquot CRC-32 Source e EXE (45 KB): CRCc. ZIP Utilizzare il filequot quotmake di compilazione: make - f crc32.mak modificare il file. MAK per puntare a correggere posizione di wildargs. obj. Il file. MAK esegue automaticamente un test che i risultati corrispondano a quelli di PKZIP) Questa utility a linea di comando può essere utilizzato con i caratteri jolly per trovare il CRC-32 dei file in una directory, per esempio:. Crc32.

Comments

Popular Posts