or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

crc1.mdcrc16-algorithms.mdcrc24.mdcrc32-algorithms.mdcrc8-algorithms.mdindex.md
tile.json

crc8-algorithms.mddocs/

8-Bit CRC Algorithms

The CRC package provides three 8-bit CRC algorithms: CRC8, CRC8 1-Wire, and CRC8 DVB-S2. Each algorithm uses different polynomials and initialization values optimized for specific use cases.

Import

import { crc8, crc81wire, crc8dvbs2 } from "crc";
import crc8 from "crc/crc8";
import crc81wire from "crc/crc81wire";
import crc8dvbs2 from "crc/crc8dvbs2";

// Raw calculators
import crc8Calculator from "crc/calculators/crc8";
import crc81wireCalculator from "crc/calculators/crc81wire";
import crc8dvbs2Calculator from "crc/calculators/crc8dvbs2";
const { crc8, crc81wire, crc8dvbs2 } = require("crc");
const crc8 = require("crc/crc8");
const crc81wire = require("crc/crc81wire");
const crc8dvbs2 = require("crc/crc8dvbs2");

// Raw calculators
const crc8Calculator = require("crc/calculators/crc8");
const crc81wireCalculator = require("crc/calculators/crc81wire");
const crc8dvbs2Calculator = require("crc/calculators/crc8dvbs2");

API

CRC8 Standard

/**
 * Calculate standard CRC8 checksum
 * @param value - Input data as string, ArrayBuffer, or Buffer
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 checksum as unsigned 8-bit number
 */
function crc8(value: BufferInput, previous?: number): number;

/**
 * CRC8 function with additional properties
 */
interface CRC8Module extends CRCModule {
  /** Returns signed CRC8 value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "crc-8" */
  model: "crc-8";
}

CRC8 1-Wire

/**
 * Calculate CRC8 1-Wire checksum (optimized for 1-Wire protocol)
 * @param value - Input data as string, ArrayBuffer, or Buffer
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 1-Wire checksum as unsigned 8-bit number
 */
function crc81wire(value: BufferInput, previous?: number): number;

/**
 * CRC8 1-Wire function with additional properties
 */
interface CRC81WireModule extends CRCModule {
  /** Returns signed CRC8 1-Wire value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 1-Wire value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "dallas-1-wire" */
  model: "dallas-1-wire";
}

CRC8 DVB-S2

/**
 * Calculate CRC8 DVB-S2 checksum (used in DVB-S2 standard)
 * @param value - Input data as string, ArrayBuffer, or Buffer  
 * @param previous - Previous CRC value for incremental calculation (optional)
 * @returns CRC8 DVB-S2 checksum as unsigned 8-bit number
 */
function crc8dvbs2(value: BufferInput, previous?: number): number;

/**
 * CRC8 DVB-S2 function with additional properties
 */
interface CRC8DVBS2Module extends CRCModule {
  /** Returns signed CRC8 DVB-S2 value */
  signed: (value: BufferInput, previous?: number) => number;
  /** Returns unsigned CRC8 DVB-S2 value (same as main function) */
  unsigned: (value: BufferInput, previous?: number) => number;
  /** CRC model identifier: "crc-8-dvb-s2" */
  model: "crc-8-dvb-s2";
}

Raw Calculators

/**
 * Raw CRC8 calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 checksum as number
 */
function crc8Calculator(current: Uint8Array, previous?: number): number;

/**
 * Raw CRC8 1-Wire calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 1-Wire checksum as number
 */
function crc81wireCalculator(current: Uint8Array, previous?: number): number;

/**
 * Raw CRC8 DVB-S2 calculator function for Uint8Array input
 * @param current - Input data as Uint8Array
 * @param previous - Previous CRC value for incremental calculation (optional, defaults to 0)
 * @returns CRC8 DVB-S2 checksum as number
 */
function crc8dvbs2Calculator(current: Uint8Array, previous?: number): number;

Usage

Basic 8-Bit CRC Calculations

import { crc8, crc81wire, crc8dvbs2 } from "crc";

const data = "test data";

// Calculate different CRC8 variants
const standardCrc8 = crc8(data);
const oneWireCrc8 = crc81wire(data);
const dvbs2Crc8 = crc8dvbs2(data);

console.log("CRC8:", standardCrc8.toString(16));
console.log("CRC8 1-Wire:", oneWireCrc8.toString(16));
console.log("CRC8 DVB-S2:", dvbs2Crc8.toString(16));

Protocol-Specific Usage

// 1-Wire protocol usage
import crc81wire from "crc/crc81wire";

const deviceId = Buffer.from([0x28, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC]);
const crc = crc81wire(deviceId);
console.log("1-Wire CRC:", crc.toString(16));

// DVB-S2 usage
import crc8dvbs2 from "crc/crc8dvbs2";

const dvbData = Buffer.from("DVB-S2 frame data");
const dvbCrc = crc8dvbs2(dvbData);
console.log("DVB-S2 CRC:", dvbCrc.toString(16));

Incremental Calculation

import crc8 from "crc/crc8";

// Process data in chunks
let crcValue = crc8("chunk1");
crcValue = crc8("chunk2", crcValue);
crcValue = crc8("chunk3", crcValue);

console.log("Final CRC8:", crcValue.toString(16));

Performance Optimization

import crc8Calculator from "crc/calculators/crc8";

// Use raw calculator for better performance
const encoder = new TextEncoder();
const data = encoder.encode("performance test");
const result = crc8Calculator(data);

console.log("CRC8 result:", result.toString(16));

Signed vs Unsigned Results

import crc8 from "crc/crc8";

const data = "test";

// Different result formats
const unsigned = crc8(data);           // 0-255 range
const signed = crc8.signed(data);      // -128 to 127 range
const alsoUnsigned = crc8.unsigned(data); // Same as main function

console.log("Unsigned:", unsigned);
console.log("Signed:", signed);
console.log("Model:", crc8.model); // "crc-8"

Buffer and ArrayBuffer Support

import { crc8, crc81wire } from "crc";

// String input
const stringCrc = crc8("hello");

// Buffer input
const buffer = Buffer.from("hello", "utf8");
const bufferCrc = crc8(buffer);

// ArrayBuffer input
const arrayBuffer = new ArrayBuffer(5);
const view = new Uint8Array(arrayBuffer);
view.set([104, 101, 108, 108, 111]); // "hello"
const arrayBufferCrc = crc8(arrayBuffer);

console.log("All should be equal:", stringCrc === bufferCrc && bufferCrc === arrayBufferCrc);

Algorithm Characteristics

CRC8 Standard

  • Polynomial: x^8 + x^2 + x^1 + 1
  • Use Case: General-purpose 8-bit error detection
  • Common Applications: Serial communications, data storage

CRC8 1-Wire

  • Polynomial: x^8 + x^5 + x^4 + 1
  • Use Case: Dallas Semiconductor 1-Wire protocol
  • Common Applications: Temperature sensors, device identification

CRC8 DVB-S2

  • Polynomial: x^8 + x^7 + x^6 + x^4 + x^2 + 1
  • Use Case: Digital Video Broadcasting - Satellite - Second Generation
  • Common Applications: Satellite communication, digital TV broadcasting

All 8-bit CRC algorithms provide good error detection capabilities for small to medium-sized data blocks and are computationally efficient.