ancp Posted March 24, 2009 Posted March 24, 2009 Hello all, please, can someone help me how to calculate checksum file: CRC-8? I am no expert on computing bytes and I tried browse this forum, but found nothing Is CRC8 ascii sum of all bytes and multiply of 256? And,... Is there any quick method for this calculation, because I need to calculate a CRC8 checksum for each file in my folder (etimated File size is 10+ MB)? Thanks for any reply or guidance.
KaFu Posted March 24, 2009 Posted March 24, 2009 (edited) Not sure, try thisexpandcollapse popupDim $avTest[5] = ["Test line 1.", "abcdefghijklmnopqrstuvwxyz01234567890", 0xFEDCBA98, "", StringToBinary("Binary test.")] $sMsg = "" For $n = 0 To UBound($avTest) - 1 $sMsg &= $avTest[$n] & " CRC8 = " & _StringCrc8($avTest[$n]) & @CRLF Next MsgBox(64, "StringCrc8 Test", $sMsg) ; ======================================================= ; Function _StringCrc8 ; Purpose: Return the CRC8 checksum of the input value ; Author: CRC16 example by roby and PsaltyDS at http://www.autoitscript.com/forum/index.php?showtopic=55402&view=findpost&p=420336 ; CRC8 by KaFu derived from CRC16 and a CRC8 table found here http://snippets.dzone.com/tag/crc8 ; ======================================================= Func _StringCrc8($value) Local $crc = 0x0000, $i = 0 Local $table[256] = [ _ 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, _ 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, _ 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, _ 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, _ 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, _ 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, _ 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, _ 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, _ 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, _ 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, _ 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, _ 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, _ 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, _ 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, _ 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, _ 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, _ 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, _ 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, _ 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, _ 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, _ 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, _ 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, _ 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, _ 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, _ 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, _ 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, _ 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, _ 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, _ 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, _ 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, _ 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, _ 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3 ] ConsoleWrite("Debug: $value = " & $value & " Len = " & StringLen($value) & @LF) For $i = 1 To StringLen($value) $crc = BitXOR(BitShift($crc, 8), $table[BitAND(BitXOR($crc, Asc(StringMid($value, $i, 1))), 0xFF) ]) Next Return Hex($crc, 4) EndFunc ;==>_StringCrc8Derived from this example #420336 by roby and PsaltyDS, add this crc8 table http://snippets.dzone.com/tag/crc8To get crc8 from a file I think a fileread of the content to a var and then calc crc8 on that var would do. Edited March 24, 2009 by KaFu OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2024-Oct-13) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Oct-13) HMW - Hide my Windows (2024-Oct-19) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2024-Oct-20) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16)
ancp Posted March 24, 2009 Author Posted March 24, 2009 (edited) Many thanks, KaFu for your assistance, but returned value from _StringCrc8() func isn't correct 8-bit CRC. I compare the values with hex editor, which calculates different CRC-8. I tested this function on the file with size 400kB. My old PC (2.8 GHz Celeron) died after ten minutes The second PC (Core Duo 1.7 GHz) returned value after 15 sec, but with wrong value. On this forum I found the 32-bit CRC which works incredibly quickly. Is there a possibility to revise it to CRC8? Edited March 24, 2009 by ancp
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now