home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / include / crc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-11  |  1.8 KB  |  53 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : crc.cpp                                                             //
  10. //  Description: CRC checksum                                                        //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #include "CRC.h"
  15.  
  16. unsigned short KCRC::Update(unsigned short crc, unsigned char * buffer, int len )
  17. {
  18.     while ( len-- > 0 ) 
  19.     {
  20.         if ( byteswap )
  21.             crc = (crc << 8) ^ crctab[(crc>>8)     ^ * buffer++];
  22.         else
  23.             crc = (crc >> 8) ^ crctab[(crc & 0xFF) ^ * buffer++]; 
  24.     }
  25.  
  26.     return crc;
  27. }
  28.  
  29.  
  30. KCRC::KCRC()
  31. {
  32.     for (int b = 0; b <= 0xFF; b++ )
  33.     {
  34.         unsigned short v;
  35.         int i;
  36.  
  37.         if (byteswap)
  38.         {
  39.             v = b << 8;
  40.             for (i=0; i<8; i++)
  41.                 v = (v & 0x8000) ? (v<<1) ^ poly : v << 1;
  42.         }
  43.         else
  44.         {
  45.             v = b;
  46.             for(i=0; i<8; i++)
  47.                 v = v & 1 ? (v>>1) ^ poly : v >> 1;
  48.         }
  49.  
  50.         crctab[b] = v;
  51.     }
  52. }
  53.