Gapotchenko.FX.Data.Integrity.Checksum.Crc8
2024.1.3
Prefix Reserved
dotnet add package Gapotchenko.FX.Data.Integrity.Checksum.Crc8 --version 2024.1.3
NuGet\Install-Package Gapotchenko.FX.Data.Integrity.Checksum.Crc8 -Version 2024.1.3
<PackageReference Include="Gapotchenko.FX.Data.Integrity.Checksum.Crc8" Version="2024.1.3" />
paket add Gapotchenko.FX.Data.Integrity.Checksum.Crc8 --version 2024.1.3
#r "nuget: Gapotchenko.FX.Data.Integrity.Checksum.Crc8, 2024.1.3"
// Install Gapotchenko.FX.Data.Integrity.Checksum.Crc8 as a Cake Addin #addin nuget:?package=Gapotchenko.FX.Data.Integrity.Checksum.Crc8&version=2024.1.3 // Install Gapotchenko.FX.Data.Integrity.Checksum.Crc8 as a Cake Tool #tool nuget:?package=Gapotchenko.FX.Data.Integrity.Checksum.Crc8&version=2024.1.3
Overview
The module provides the implementation of checksum algorithms belonging to the CRC-8 family.
Quick Start
Use the following code to calculate a CRC-8 checksum for the specified data, be it System.Byte[]
, System.ReadOnlySpan<Byte>
or System.IO.Stream
:
using Gapotchenko.FX.Data.Integrity.Checksum;
var checksum = Crc8.Standard.ComputeChecksum(data);
If you need to calculate a CRC-8 checksum iteratively then the following approach becomes handy:
var iterator = Crc8.Standard.CreateIterator();
iterator.ComputeBlock(...); // block 1
// ...
iterator.ComputeBlock(...); // block N
// Compute the final checksum:
var checksum = iterator.ComputeFinal();
Available CRC-8 Algorithms
CRC-8 family of cyclic redundancy checks consists of several attested checksum algorithms with predefined parameters:
Algorithm | Aliases | Gapotchenko.FX Implementation | Parameters: poly | init | refin | refout | xorout | check |
---|---|---|---|---|---|---|---|---|
CRC-8 (standard, recommended) | CRC-8/SMBUS | Crc8.Standard |
0x07 | 0x00 | false | false | 0x00 | 0xf4 |
CRC-8/TECH-3250 | CRC-8/AES, CRC-8/EBU | Crc8.Attested.Tech3250 |
0x1d | 0xff | true | true | 0x00 | 0x97 |
CRC-8/SAE-J1850 | Crc8.Attested.SaeJ1850 |
0x1d | 0xff | false | false | 0xff | 0x4b | |
CRC-8/OPENSAFETY | Crc8.Attested.OpenSafety |
0x2f | 0x00 | false | false | 0x00 | 0x3e | |
CRC-8/NRSC-5 | Crc8.Attested.Nrsc5 |
0x31 | 0xff | false | false | 0x00 | 0xf7 | |
CRC-8/MIFARE-MAD | Crc8.Attested.MifareMad |
0x1d | 0xc7 | false | false | 0x00 | 0x99 | |
CRC-8/MAXIM | CRC-8/MAXIM-DOW, DOW-CRC | Crc8.Attested.Maxim |
0x31 | 0x00 | true | true | 0x00 | 0xa1 |
CRC-8/I-CODE | Crc8.Attested.ICode |
0x1d | 0xfd | false | false | 0x00 | 0x7e | |
CRC-8/HITAG | Crc8.Attested.Hitag |
0x1d | 0xff | false | false | 0x00 | 0xb4 | |
CRC-8/DARC | Crc8.Attested.Darc |
0x39 | 0x00 | true | true | 0x00 | 0x15 | |
CRC-8/BLUETOOTH | Crc8.Attested.Bluetooth |
0xa7 | 0x00 | true | true | 0x00 | 0x26 | |
CRC-8/AUTOSAR | Crc8.Attested.Autosar |
0x2f | 0xff | false | false | 0xff | 0xdf |
The check
parameter shows what checksum value an algorithm should produce for "123456789"
input string interpreted as an ASCII data:
// Get the byte representation of the ASCII string.
var data = Encoding.ASCII.GetBytes("123456789");
// Compute the checksum.
var checksum = Crc8.Standard.ComputeChecksum(data);
// Print out the result ("Checksum=0xf4" for standard CRC-8).
Console.WriteLine("Checksum=0x{0:x}", checksum);
Recommended CRC-8 Algorithm
Among all other possibilities, it is recommended to use the standard CRC-8 algorithm which comes under CRC-8, CRC-8/SMBUS aliases and is available via Crc8.Standard
property.
All other predefined algorithms are available via the corresponding properties of Crc8.Attested
class.
Custom CRC-8 Algorithms
Once in a while, you may encounter a custom CRC-8 algorithm that is neither widely known nor characterized. In that case, you can instantiate a custom checksum algorithm with the desired parameters by hand:
var checksumAlgorithm = new CustomCrc8(poly, init, refin, refout, xorout);
If you want to formalize the custom algorithm even further, you may opt in to create a separate class for it with a convenient accessor property:
/// <summary>
/// Defines a custom CRC-8 algorithm.
/// </summary>
sealed class FooCrc8 : CustomCrc8
{
FooCrc8() :
base(poly, init, refin, refout, xorout)
{
}
public static FooCrc8 Instance { get; } = new();
}
That will allow you to use the algorithm effortlessly from several places in the codebase later:
var checksum = FooCrc8.Instance.ComputeChecksum(...);
Commonly Used Types
Gapotchenko.FX.Data.Integrity.Checksum.Crc8
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- Gapotchenko.FX.Tuples
Or look at the full list of modules.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 is compatible. netcoreapp2.2 was computed. netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 is compatible. net472 is compatible. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 2.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
.NETCoreApp 3.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
.NETFramework 4.6.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
- System.ValueTuple (>= 4.5.0)
-
.NETFramework 4.7.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
.NETFramework 4.7.2
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
.NETStandard 2.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
.NETStandard 2.1
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
net5.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
net6.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
net7.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
net8.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
-
net9.0
- Gapotchenko.FX.Data.Integrity.Checksum (>= 2024.1.3)
- Gapotchenko.FX.Numerics (>= 2024.1.3)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Gapotchenko.FX.Data.Integrity.Checksum.Crc8:
Package | Downloads |
---|---|
Meadow.Foundation.Sensors.Environmental.Scd30
SCD30 I2C C02, temperature, and relative humidity sensor |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Gapotchenko.FX.Data.Integrity.Checksum.Crc8:
Repository | Stars |
---|---|
WildernessLabs/Meadow.Foundation
Unified driver and library framework for Meadow applications.
|