STH1123.ReedSolomon 2.1.0

Install-Package STH1123.ReedSolomon -Version 2.1.0
dotnet add package STH1123.ReedSolomon --version 2.1.0
<PackageReference Include="STH1123.ReedSolomon" Version="2.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add STH1123.ReedSolomon --version 2.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: STH1123.ReedSolomon, 2.1.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install STH1123.ReedSolomon as a Cake Addin
#addin nuget:?package=STH1123.ReedSolomon&version=2.1.0

// Install STH1123.ReedSolomon as a Cake Tool
#tool nuget:?package=STH1123.ReedSolomon&version=2.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

A .NET implementation of the Reed-Solomon algorithm, supporting error, erasure and errata correction.

Uses code from the Reed-Solomon component of the ZXing.Net project and code I've ported to C#, from the python code at Wikiversity.

Code examples

Create a representation of a Galois field:

GenericGF field = new GenericGF(285, 256, 0);

Reed-Solomon encoding:

Create an instance of the ReedSolomonEncoder class, specifying the Galois field to use:

ReedSolomonEncoder rse = new ReedSolomonEncoder(field);

To encode the string "Hello World" with 9 ecc symbols, 9 null-values must be appended to store the ecc symbols:

int[] data = new int[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

Call the Encode() method of the ReedSolomonEncoder class to encode data with Reed-Solomon:

rse.Encode(data, 9);

The data variable now contains:

0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x40, 0x86, 0x08, 0xD5, 0x2C, 0xAE, 0xB5, 0x8F, 0x83

Reed-Solomon decoding:

Previous data variable with some errors:

data = new int[] { 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x40, 0x86, 0x08, 0xD5, 0x2C, 0xAE, 0xB5, 0x8F, 0x83 };

Providing the locations of some erasures:

int[] erasures = new int[] { 0, 1, 2 };

Create an instance of the ReedSolomonDecoder class, specifying the Galois field to use:

ReedSolomonDecoder rsd = new ReedSolomonDecoder(field);

Call the Decode() method of the ReedSolomonDecoder class to decode (correct) data with Reed-Solomon:

if (rsd.Decode(data, 9, erasures))
{
    // Data corrected.
}
else
{
    // Too many errors/erasures to correct.
}

The data variable now contains:

0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x40, 0x86, 0x08, 0xD5, 0x2C, 0xAE, 0xB5, 0x8F, 0x83
  • .NETFramework 2.0

    • No dependencies.
  • .NETFramework 4.0

    • No dependencies.
  • .NETStandard 1.1

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.0 10,232 4/5/2020