Boost logo

Boost Users :

Subject: Re: [Boost-users] crc updating how?
From: U.Mutlu (for-gmane_at_[hidden])
Date: 2015-07-09 18:50:41


U.Mutlu wrote on 07/09/2015 04:38 PM:
> Hi,
> I need to calc the crc chunkwise (ie. calc crc of a block,
> then continue with the next block etc.).
> Is this (not) possible with the boost crc?
>
> In other words: how can the type "crc_32_type" be initialized
> with a user supplied uint32_t value?
>
> boost::crc_32_type crc;
> crc = 0x1234; // <-- this brings compile error
> crc.process_bytes(buf, len);
>
> error: no match for ‘operator=’ (operand types are ‘boost::crc_32_type {aka
> boost::crc_optimal<32ul, 79764919u, 4294967295u, 4294967295u, true, true>}’
> and ‘const uint32_t {aka const unsigned int}’)

Problem now solved as follows:

uint32_t crc32(const void* Ap, const size_t AuLen, uint32_t& /* IO */
AuInterimResult)
   { // 2015-07-09-Th
     // for "crc updating" pass AuInterimResult; must be 0 or 0xFFFFFFFF initially
     if (!AuInterimResult) AuInterimResult = 0xFFFFFFFF;
     boost::crc_optimal<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true>
crc(AuInterimResult);
     crc.process_bytes((const char*) Ap, AuLen);
     AuInterimResult = crc.get_interim_remainder();
     return crc.checksum();
   }


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net