WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Math Related UDFs

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

CRC32 Computations

 Keywords:  CRC CRC32 Checksum Hash

;Define UDFs
#DefineFunction Hex2Dec(hex)
   str="0123456789ABCDEF"
   hex=StrTrim(StrUpper(hex))
   hexlen=StrLen(hex)
   dec=0
   for x=1 to hexlen
       dec=(dec*16) + StrIndex(str,strsub(hex,x,1),0,@fwdscan) -1
   next
   return(dec)
#EndFunction

#DefineFunction Dec2Hex(Dec)
   IsZero=@TRUE
   str="0123456789ABCDEF"
   hex=""
   
   for x=7 to 0 by -1
       nibble= (dec >> (x*4)) & 15
       if nibble==0 && IsZero==@TRUE then continue
       IsZero=@FALSE
       hex=strcat(hex,Strsub(str,nibble+1,1))
   next
   return(hex)
#EndFunction

#DefineFunction InitCRCData()



;Define crc table
crc32tbl="00000000,"
crc32tbl=strcat(crc32tbl,"77073096,ee0e612c,990951ba,076dc419,")
crc32tbl=strcat(crc32tbl,"706af48f,e963a535,9e6495a3,0edb8832,")
crc32tbl=strcat(crc32tbl,"79dcb8a4,e0d5e91e,97d2d988,09b64c2b,")
crc32tbl=strcat(crc32tbl,"7eb17cbd,e7b82d07,90bf1d91,1db71064,")
crc32tbl=strcat(crc32tbl,"6ab020f2,f3b97148,84be41de,1adad47d,")
crc32tbl=strcat(crc32tbl,"6ddde4eb,f4d4b551,83d385c7,136c9856,")
crc32tbl=strcat(crc32tbl,"646ba8c0,fd62f97a,8a65c9ec,14015c4f,")
crc32tbl=strcat(crc32tbl,"63066cd9,fa0f3d63,8d080df5,3b6e20c8,")
crc32tbl=strcat(crc32tbl,"4c69105e,d56041e4,a2677172,3c03e4d1,")
crc32tbl=strcat(crc32tbl,"4b04d447,d20d85fd,a50ab56b,35b5a8fa,")
crc32tbl=strcat(crc32tbl,"42b2986c,dbbbc9d6,acbcf940,32d86ce3,")
crc32tbl=strcat(crc32tbl,"45df5c75,dcd60dcf,abd13d59,26d930ac,")
crc32tbl=strcat(crc32tbl,"51de003a,c8d75180,bfd06116,21b4f4b5,")
crc32tbl=strcat(crc32tbl,"56b3c423,cfba9599,b8bda50f,2802b89e,")
crc32tbl=strcat(crc32tbl,"5f058808,c60cd9b2,b10be924,2f6f7c87,")
crc32tbl=strcat(crc32tbl,"58684c11,c1611dab,b6662d3d,76dc4190,")
crc32tbl=strcat(crc32tbl,"01db7106,98d220bc,efd5102a,71b18589,")
crc32tbl=strcat(crc32tbl,"06b6b51f,9fbfe4a5,e8b8d433,7807c9a2,")
crc32tbl=strcat(crc32tbl,"0f00f934,9609a88e,e10e9818,7f6a0dbb,")
crc32tbl=strcat(crc32tbl,"086d3d2d,91646c97,e6635c01,6b6b51f4,")
crc32tbl=strcat(crc32tbl,"1c6c6162,856530d8,f262004e,6c0695ed,")
crc32tbl=strcat(crc32tbl,"1b01a57b,8208f4c1,f50fc457,65b0d9c6,")
crc32tbl=strcat(crc32tbl,"12b7e950,8bbeb8ea,fcb9887c,62dd1ddf,")
crc32tbl=strcat(crc32tbl,"15da2d49,8cd37cf3,fbd44c65,4db26158,")
crc32tbl=strcat(crc32tbl,"3ab551ce,a3bc0074,d4bb30e2,4adfa541,")
crc32tbl=strcat(crc32tbl,"3dd895d7,a4d1c46d,d3d6f4fb,4369e96a,")
crc32tbl=strcat(crc32tbl,"346ed9fc,ad678846,da60b8d0,44042d73,")
crc32tbl=strcat(crc32tbl,"33031de5,aa0a4c5f,dd0d7cc9,5005713c,")
crc32tbl=strcat(crc32tbl,"270241aa,be0b1010,c90c2086,5768b525,")
crc32tbl=strcat(crc32tbl,"206f85b3,b966d409,ce61e49f,5edef90e,")
crc32tbl=strcat(crc32tbl,"29d9c998,b0d09822,c7d7a8b4,59b33d17,")
crc32tbl=strcat(crc32tbl,"2eb40d81,b7bd5c3b,c0ba6cad,edb88320,")
crc32tbl=strcat(crc32tbl,"9abfb3b6,03b6e20c,74b1d29a,ead54739,")
crc32tbl=strcat(crc32tbl,"9dd277af,04db2615,73dc1683,e3630b12,")
crc32tbl=strcat(crc32tbl,"94643b84,0d6d6a3e,7a6a5aa8,e40ecf0b,")
crc32tbl=strcat(crc32tbl,"9309ff9d,0a00ae27,7d079eb1,f00f9344,")
crc32tbl=strcat(crc32tbl,"8708a3d2,1e01f268,6906c2fe,f762575d,")
crc32tbl=strcat(crc32tbl,"806567cb,196c3671,6e6b06e7,fed41b76,")
crc32tbl=strcat(crc32tbl,"89d32be0,10da7a5a,67dd4acc,f9b9df6f,")
crc32tbl=strcat(crc32tbl,"8ebeeff9,17b7be43,60b08ed5,d6d6a3e8,")
crc32tbl=strcat(crc32tbl,"a1d1937e,38d8c2c4,4fdff252,d1bb67f1,")
crc32tbl=strcat(crc32tbl,"a6bc5767,3fb506dd,48b2364b,d80d2bda,")
crc32tbl=strcat(crc32tbl,"af0a1b4c,36034af6,41047a60,df60efc3,")
crc32tbl=strcat(crc32tbl,"a867df55,316e8eef,4669be79,cb61b38c,")
crc32tbl=strcat(crc32tbl,"bc66831a,256fd2a0,5268e236,cc0c7795,")
crc32tbl=strcat(crc32tbl,"bb0b4703,220216b9,5505262f,c5ba3bbe,")
crc32tbl=strcat(crc32tbl,"b2bd0b28,2bb45a92,5cb36a04,c2d7ffa7,")
crc32tbl=strcat(crc32tbl,"b5d0cf31,2cd99e8b,5bdeae1d,9b64c2b0,")
crc32tbl=strcat(crc32tbl,"ec63f226,756aa39c,026d930a,9c0906a9,")
crc32tbl=strcat(crc32tbl,"eb0e363f,72076785,05005713,95bf4a82,")
crc32tbl=strcat(crc32tbl,"e2b87a14,7bb12bae,0cb61b38,92d28e9b,")
crc32tbl=strcat(crc32tbl,"e5d5be0d,7cdcefb7,0bdbdf21,86d3d2d4,")
crc32tbl=strcat(crc32tbl,"f1d4e242,68ddb3f8,1fda836e,81be16cd,")
crc32tbl=strcat(crc32tbl,"f6b9265b,6fb077e1,18b74777,88085ae6,")
crc32tbl=strcat(crc32tbl,"ff0f6a70,66063bca,11010b5c,8f659eff,")
crc32tbl=strcat(crc32tbl,"f862ae69,616bffd3,166ccf45,a00ae278,")
crc32tbl=strcat(crc32tbl,"d70dd2ee,4e048354,3903b3c2,a7672661,")
crc32tbl=strcat(crc32tbl,"d06016f7,4969474d,3e6e77db,aed16a4a,")
crc32tbl=strcat(crc32tbl,"d9d65adc,40df0b66,37d83bf0,a9bcae53,")
crc32tbl=strcat(crc32tbl,"debb9ec5,47b2cf7f,30b5ffe9,bdbdf21c,")
crc32tbl=strcat(crc32tbl,"cabac28a,53b39330,24b4a3a6,bad03605,")
crc32tbl=strcat(crc32tbl,"cdd70693,54de5729,23d967bf,b3667a2e,")
crc32tbl=strcat(crc32tbl,"c4614ab8,5d681b02,2a6f2b94,b40bbe37,")
crc32tbl=strcat(crc32tbl,"c30c8ea1,5a05df1b,2d02ef8d")


;Load 256 byte array

crc32data=ArrDimension(256)
for xx=0 to 255
    val=ItemExtract(xx+1,crc32tbl, "," )
    crc32data[xx]=Hex2Dec(val)
next

return crc32data
#ENDFUNCTION


#DefineFunction CRC32(crcCookie,fn)
   ;load binary buffer w/data to crc32
   fs=Filesize(fn)
   bb=BinaryAlloc(fs)
   BinaryRead(bb,fn)
   
   ;Do checksum
   
   crc= -1
   FFFFFF=Hex2Dec("00FFFFFF")
   FF=Hex2Dec("FF")
   lastoffset=fs-1
   for xx=0 to lastoffset
      y=BinaryPeek(bb,xx)
      crc = ((crc >> 8) & FFFFFF) ^ crcCookie[ (crc ^ y) & FF]
   next
   
   crc = crc ^ -1
   crchex=Dec2Hex(crc)
   BinaryFree(bb)
   return crchex
#ENDFUNCTION

;OK all UDFS defined and whatnot.  Now do it


;Just do the init once
crcCookie=InitCrcData()

;Now test a few files

myfile="small.gif"
mycrc=CRC32(crcCookie,myfile)
Message(myfile,mycrc)

myfile="big.gif"
mycrc=CRC32(crcCookie,myfile)
Message(myfile,mycrc)

myfile="some.dll"
mycrc=CRC32(crcCookie,myfile)
Message(myfile,mycrc)



Article ID:   W15310
File Created: 2002:09:05:13:51:20
Last Updated: 2002:09:05:13:51:20