Click here to Skip to main content
6,634,665 members and growing! (22,102 online)
Email Password   helpLost your password?
General Programming » Algorithms & Recipes » General     Intermediate License: The Code Project Open License (CPOL)

ZIP CRC32 Static Method and Values

By G.Franklin

A static C# method and values for a small footprint paste into your C# code
C# (C# 1.0, C# 2.0, C# 3.0), .NET, Dev
Posted:27 Dec 2007
Updated:30 Jun 2008
Views:11,584
Bookmarked:13 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
10 votes for this article.
Popularity: 3.45 Rating: 3.45 out of 5
4 votes, 40.0%
1
1 vote, 10.0%
2

3
1 vote, 10.0%
4
4 votes, 40.0%
5

Introduction

What! Another Crc32 routine? Well, I like small, fast, and lightweight solutions ... especially the kind having a quick copy and paste solution.

Using the Code

Copy and paste the following into your class or struct... and add overloads as you wish. I've put some overloads into the download code.

//*****************************************************************************
#region Crc32 ESSENTIAL STATIC METHOD AND POLYVALS (where all THE WORK IS DONE)
    internal static uint Crc32  // The only moving part (method) 
        ( uint theStartingCRC
        , byte[] theBytes
        , int theStartingIndex
        , int forCount
        )
    {
        uint iCursor = ~theStartingCRC;
        int iTop = theStartingIndex + forCount;
        for (int i = theStartingIndex; i < iTop; i++)
        {
            iCursor = (((uint)(iCursor / 256)) & 0xFFFFFF)
                ^ Crc32_PolyVals[(int)((iCursor ^ theBytes[i]) & 0xFF)]; 
        }
        return ~iCursor;
    }
    // NOTE: No PolyVals dynamic build! 
    // Weighing dynamic generation code bytes=<whatever> 
    // versus 1024 static bytes, we suggest the savings(if any) of dynamic generation 
    // are not significant and static storage never has to be 
    // dynamically generated (grin).
    // We consider less heap motion (allocation/collection) a good thing.
    private static readonly uint[] Crc32_PolyVals = 
    {
        0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
        0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
        0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
        0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
        0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
        0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
        0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
        0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
        0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
        0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
        0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
        0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
        0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
        0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
        0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
        0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
        0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
        0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
        0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
        0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
        0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
        0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
        0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
        0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
        0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
        0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
        0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
        0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
        0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
        0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
        0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
        0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,
     };

#endregion Crc32 ESSENTIAL STATIC METHOD AND POLYVALS

History

  • 27th December, 2007: Initial post
  • 27th June, 2008: Corrected the "stream overload" example in the download file

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

G.Franklin


Member

Location: United States United States

Other popular Algorithms & Recipes articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Layout  Per page   
 Msgs 1 to 8 of 8 (Total in Forum: 8) (Refresh)FirstPrevNext
QuestionBug in stream implementation? PinmemberSteve Pritchard1:10 27 Jun '08  
AnswerRe: Bug in stream implementation? Pinmemberg.CoderCat7:49 27 Jun '08  
GeneralWhat is your polynomial generator? PinmemberMember 122022:06 27 Dec '07  
GeneralRe: What is your polynomial generator? Pinmemberg.CoderCat8:16 29 Feb '08  
GeneralRe: What is your polynomial generator? PinmemberTobiasP2:38 9 Jul '08  
GeneralRe: What is your polynomial generator? Pinmemberg.CoderCat11:35 9 Jul '08  
GeneralSuggestions... PinmemberMichael Moreno20:36 27 Dec '07  
GeneralRe: Suggestions... Pinmemberg.CoderCat8:33 29 Feb '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 30 Jun 2008
Editor: Deeksha Shenoy
Copyright 2007 by G.Franklin
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project