/*
* Copyright 2012 The WebRTC Project Authors . All rights reserved .
*
* Use of this source code is governed by a BSD - style license
* that can be found in the LICENSE file in the root of the source
* tree . An additional intellectual property rights grant can be found
* in the file PATENTS . All contributing project authors may
* be found in the AUTHORS file in the root of the source tree .
*/
#include "rtc_base/crc32.h"
#include <cstddef>
#include <cstdint>
#include <iterator>
namespace webrtc {
// This implementation is based on the sample implementation in RFC 1952.
// CRC32 polynomial, in reversed form.
// See RFC 1952, or http://en.wikipedia.org/wiki/Cyclic_redundancy_check
static const uint32_t kCrc32Polynomial =
0 xEDB88320;
static uint32_t* LoadCrc32Table() {
static uint32_t kCrc32Table[
256 ];
for (uint32_t i =
0 ; i < std::size(kCrc32Table); ++i) {
uint32_t c = i;
for (size_t j =
0 ; j <
8 ; ++j) {
if (c &
1 ) {
c = kCrc32Polynomial ^ (c >>
1 );
}
else {
c >>=
1 ;
}
}
kCrc32Table[i] = c;
}
return kCrc32Table;
}
uint32_t UpdateCrc32(uint32_t start,
const void * buf, size_t len) {
static uint32_t* kCrc32Table = LoadCrc32Table();
uint32_t c = start ^
0 xFFFFFFFF;
const uint8_t* u =
static_cast <
const uint8_t*>(buf);
for (size_t i =
0 ; i < len; ++i) {
c = kCrc32Table[(c ^ u[i]) &
0 xFF] ^ (c >>
8 );
}
return c ^
0 xFFFFFFFF;
}
}
// namespace webrtc
Messung V0.5 in Prozent C=89 H=100 G=94
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-08-27)
¤
*© Formatika GbR, Deutschland