crc

package
v0.19.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

README

CRC 循环冗余校验库

CRC(Cyclic Redundancy Check)即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性

特性

  • ✅ 通用配置:通过 Config 结构体描述任意 CRC 算法参数
  • ✅ 查表法优化:使用 256 项预计算表,sync.Once 保证线程安全的懒加载
  • ✅ 线程安全:Compute 方法内部加锁,可并发调用
  • ✅ 工厂模式:支持标准工厂与带缓存工厂
  • ✅ 预定义配置:内置 36 种常用 CRC 算法配置与工厂
  • ✅ 位宽支持:支持 1-64 位任意宽度

安装

go get github.com/HitGameAI/apex-toolbox/pkg/crc

快速开始

package main

import (
    "fmt"
    "github.com/HitGameAI/apex-toolbox/pkg/crc"
)

func main() {
    // 使用预定义的 CRC-32 配置创建计算器
    calc, err := crc.New(crc.CRC32)
    if err != nil {
        panic(err)
    }

    // 计算校验值
    data := []byte("hello world")
    checksum := calc.Compute(data)
    fmt.Printf("CRC-32: 0x%08X\n", checksum)
}

CRC 算法参数模型解释

NAME:参数模型名称
WIDTH:宽度,即 CRC 比特数
POLY:生成项的简写,以16进制表示例如:CRC-32 即是 0x04C11DB7,忽略了最高位的"1",即完整的生成项是 0x104C11DB7
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示
REFIN:待测数据的每个字节是否按位反转,True 或 False
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True 或 False
XOROUT:计算结果与此参数异或后得到最终的 CRC 值

预定义 CRC 参数模型

以下表格与 config.go 中的预定义变量完全一致:

CRC-4 ~ CRC-8
变量名 宽度 多项式 初始值 结果异或值 输入反转 输出反转
CRC4_ITU 4 0x03 0x00 0x00 true true
CRC5_EPC 5 0x09 0x09 0x00 false false
CRC5_ITU 5 0x15 0x00 0x00 true true
CRC5_USB 5 0x05 0x1F 0x1F true true
CRC6_ITU 6 0x03 0x00 0x00 true true
CRC7_MMC 7 0x09 0x00 0x00 false false
CRC8 8 0x07 0x00 0x00 false false
CRC8_ATM 8 0x07 0x00 0x00 false false
CRC8_ITU 8 0x07 0x00 0x55 false false
CRC8_ROHC 8 0x07 0xFF 0x00 true true
CRC8_MAXIM 8 0x31 0x00 0x00 true true
CRC8_CDMA2000 8 0x9B 0x00 0x00 false false
CRC8_DALLAS_1WIRE 8 0x31 0x00 0x00 false false
CRC-16
变量名 宽度 多项式 初始值 结果异或值 输入反转 输出反转
CRC16_IBM 16 0x8005 0x0000 0x0000 true true
CRC16_MAXIM 16 0x8005 0x0000 0xFFFF true true
CRC16_USB 16 0x8005 0xFFFF 0xFFFF true true
CRC16_MODBUS 16 0x8005 0xFFFF 0x0000 true true
CRC16_CCITT 16 0x1021 0xFFFF 0x0000 false false
CRC16_CCITT_FALSE 16 0x1021 0x0000 0x0000 false false
CRC16_X25 16 0x1021 0xFFFF 0xFFFF true true
CRC16_XMODEM 16 0xA001 0x00 0x00 false false
CRC16_DNP 16 0x3D65 0x0000 0xFFFF true true
CRC16_ANSI 16 0xA001 0x0000 0x0000 false false
CRC16_CCITT_KERMIT 16 0x1021 0x0000 0x0000 true true
CRC16_GENERIC 16 0xA001 0x0000 0x0000 false false
CRC16_CCITT_TRUE 16 0x1021 0x0000 0x0000 true true
CRC-24 / CRC-32 / CRC-64
变量名 宽度 多项式 初始值 结果异或值 输入反转 输出反转
CRC24_OPENPGP 24 0x864CFB 0xB704CE 0x000000 false false
CRC32 32 0x04C11DB7 0xFFFFFFFF 0xFFFFFFFF true true
CRC32_MPEG2 32 0x04C11DB7 0xFFFFFFFF 0x00000000 false false
CRC32_PKZIP 32 0xEDB88320 0xFFFFFFFF 0xFFFFFFFF true true
CRC32C 32 0x82F63B78 0xFFFFFFFF 0xFFFFFFFF true true
CRC32_CASTAGNOLI 32 0x1EDC6F41 0xFFFFFFFF 0xFFFFFFFF true true
CRC32_ADLER32 32 0xFFFFFFFF 0x01 0x00000000 false false
CRC64_ECMA 64 0x42F0E1EBA9EA3693 0x0000000000000000 0x0000000000000000 true true
CRC64_ISO 64 0x42F0E1EBA9EA3693 0xFFFFFFFFFFFFFFFF 0x0000000000000000 true true
CRC64_WEIERSTRASS 64 0x42F0E1EBA9EA3693 0xFFFFFFFFFFFFFFFF 0x0000000000000000 true true

API 文档

Config 配置结构体
type Config struct {
    Width  uint   // 校验位宽 (1-64)
    Poly   uint64 // 生成多项式
    Init   uint64 // 初始值
    RefIn  bool   // 输入数据字节位反转
    RefOut bool   // 输出结果位反转
    XorOut uint64 // 最终异或值
}
Calculator 计算器接口
type Calculator interface {
    Compute(data []byte) uint64 // 计算数据的 CRC 校验值
    Reset()                     // 重置计算器状态
}

// 创建计算器实例
func New(cfg Config) (Calculator, error)

New 会校验 Width(1-64)和 Poly(非零),校验失败时返回错误Compute 内部使用 sync.Mutex 保证线程安全,计算完成后自动重置状态

Factory 工厂接口
type Factory interface {
    Create() (Calculator, error)
}

// 创建标准工厂(每次 Create 返回新实例)
func NewFactory(cfg Config) (Factory, error)

// 创建带缓存的工厂(sync.Once 保证只创建一次,线程安全)
func NewCachedFactory(cfg Config) Factory
预定义工厂

每个预定义 Config 变量都有对应的带缓存工厂变量,命名规则为 变量名 + Factory例如:

CRC4_ITUFactory         = NewCachedFactory(CRC4_ITU)
CRC8Factory             = NewCachedFactory(CRC8)
CRC16_MODBUSFactory     = NewCachedFactory(CRC16_MODBUS)
CRC32Factory            = NewCachedFactory(CRC32)
CRC64_ECMAFactory       = NewCachedFactory(CRC64_ECMA)
// ... 共 36 个预定义工厂

完整列表:CRC4_ITUFactory、CRC5_EPCFactory、CRC5_ITUFactory、CRC5_USBFactory、CRC6_ITUFactory、CRC7_MMCFactory、CRC8Factory、CRC8_ATMFactory、CRC8_CDMA2000Factory、CRC8_DALLAS_1WIREFactory、CRC8_ITUFactory、CRC8_ROHCFactory、CRC8_MAXIMFactory、CRC16_IBMFactory、CRC16_MAXIMFactory、CRC16_USBFactory、CRC16_MODBUSFactory、CRC16_DNPFactory、CRC16_ANSIFactory、CRC16_XMODEMFactory、CRC16_CCITTFactory、CRC16_CCITT_FALSEFactory、CRC16_CCITT_KERMITFactory、CRC16_X25Factory、CRC32Factory、CRC32_MPEG2Factory、CRC32_PKZIPFactory、CRC32CFactory、CRC24_OPENPGPFactory、CRC64_ECMAFactory、CRC64_ISOFactory、CRC64_WEIERSTRASSFactory、CRC32_CASTAGNOLIFactory、CRC16_GENERICFactory、CRC16_CCITT_TRUEFactory、CRC32_ADLER32Factory

使用示例

示例 1:使用预定义配置
// CRC-16/MODBUS
calc, _ := crc.New(crc.CRC16_MODBUS)
checksum := calc.Compute([]byte("123456789"))
fmt.Printf("CRC-16/MODBUS: 0x%04X\n", checksum)

// CRC-32
calc32, _ := crc.New(crc.CRC32)
checksum32 := calc32.Compute([]byte("123456789"))
fmt.Printf("CRC-32: 0x%08X\n", checksum32)
示例 2:使用工厂
// 标准工厂(每次创建新实例)
factory, err := crc.NewFactory(crc.CRC16_CCITT)
if err != nil {
    panic(err)
}
calc1, _ := factory.Create()
calc2, _ := factory.Create() // 独立实例

// 带缓存工厂(复用实例)
cachedFactory := crc.NewCachedFactory(crc.CRC32)
calc3, _ := cachedFactory.Create()
calc4, _ := cachedFactory.Create() // 同一实例
示例 3:使用预定义工厂
calc, err := crc.CRC16_MODBUSFactory.Create()
if err != nil {
    panic(err)
}
checksum := calc.Compute([]byte("test data"))
示例 4:自定义 CRC 配置
customConfig := crc.Config{
    Width:  16,
    Poly:   0x1021,
    Init:   0xFFFF,
    RefIn:  false,
    RefOut: false,
    XorOut: 0x0000,
}
calc, err := crc.New(customConfig)
if err != nil {
    panic(err)
}
checksum := calc.Compute([]byte("custom data"))

测试

cd pkg/crc
go test -v

运行基准测试:

go test -bench=. -benchmem

许可证

Copyright (c) 2025 by kamalyes, All Rights Reserved.

Documentation

Overview

  • @Author: kamalyes 501893067@qq.com
  • @Date: 2025-06-09 17:15:16
  • @LastEditors: kamalyes 501893067@qq.com
  • @LastEditTime: 2025-06-11 10:29:15
  • @FilePath: \go-toolbox\pkg\crc\config.go
  • @Description: CRC算法配置库 *
  • Copyright (c) 2025 by kamalyes, All Rights Reserved.

* @Author: kamalyes 501893067@qq.com * @Date: 2025-06-09 17:15:16

  • @LastEditors: kamalyes 501893067@qq.com
  • @LastEditTime: 2025-06-11 10:15:26
  • @FilePath: \go-toolbox\pkg\crc\crc.go

* @Description: CRC算法核心实现 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.

  • @Author: kamalyes 501893067@qq.com
  • @Date: 2025-06-09 17:15:16
  • @LastEditors: kamalyes 501893067@qq.com
  • @LastEditTime: 2025-06-11 10:33:31
  • @FilePath: \go-toolbox\pkg\crc\factory.go
  • @Description: *
  • Copyright (c) 2025 by kamalyes, All Rights Reserved.

Index

Constants

This section is empty.

Variables

View Source
var (
	// CRC-4/ITU标准配置
	CRC4_ITU = Config{
		Width:  4,
		Poly:   0x03,
		Init:   0x00,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x00,
	}

	// CRC-5/EPC标准配置
	CRC5_EPC = Config{
		Width:  5,
		Poly:   0x09,
		Init:   0x09,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-5/ITU标准配置
	CRC5_ITU = Config{
		Width:  5,
		Poly:   0x15,
		Init:   0x00,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x00,
	}

	// CRC-5/USB标准配置
	CRC5_USB = Config{
		Width:  5,
		Poly:   0x05,
		Init:   0x1F,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x1F,
	}

	// CRC-6/ITU标准配置
	CRC6_ITU = Config{
		Width:  6,
		Poly:   0x03,
		Init:   0x00,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x00,
	}

	// CRC-7/MMC标准配置
	CRC7_MMC = Config{
		Width:  7,
		Poly:   0x09,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-8标准配置
	CRC8 = Config{
		Width:  8,
		Poly:   0x07,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-8/ATM标准配置
	CRC8_ATM = Config{
		Width:  8,
		Poly:   0x07,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-8/ITU标准配置
	CRC8_ITU = Config{
		Width:  8,
		Poly:   0x07,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x55,
	}

	// CRC-8/ROHC标准配置
	CRC8_ROHC = Config{
		Width:  8,
		Poly:   0x07,
		Init:   0xFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x00,
	}

	// CRC-8/MAXIM标准配置
	CRC8_MAXIM = Config{
		Width:  8,
		Poly:   0x31,
		Init:   0x00,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x00,
	}

	// CRC-8/CDMA2000标准配置
	CRC8_CDMA2000 = Config{
		Width:  8,
		Poly:   0x9B,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-8/DALLAS/1-WIRE标准配置
	CRC8_DALLAS_1WIRE = Config{
		Width:  8,
		Poly:   0x31,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-16/IBM标准配置
	CRC16_IBM = Config{
		Width:  16,
		Poly:   0x8005,
		Init:   0x0000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000,
	}

	// CRC-16/MAXIM标准配置
	CRC16_MAXIM = Config{
		Width:  16,
		Poly:   0x8005,
		Init:   0x0000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFF,
	}

	// CRC-16/USB标准配置
	CRC16_USB = Config{
		Width:  16,
		Poly:   0x8005,
		Init:   0xFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFF,
	}

	// CRC-16/MODBUS标准配置
	CRC16_MODBUS = Config{
		Width:  16,
		Poly:   0x8005,
		Init:   0xFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000,
	}

	// CRC-16/CCITT标准配置
	CRC16_CCITT = Config{
		Width:  16,
		Poly:   0x1021,
		Init:   0xFFFF,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x0000,
	}

	// CRC-16/CCITT-FALSE标准配置
	CRC16_CCITT_FALSE = Config{
		Width:  16,
		Poly:   0x1021,
		Init:   0x0000,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x0000,
	}

	// CRC-16/X25标准配置
	CRC16_X25 = Config{
		Width:  16,
		Poly:   0x1021,
		Init:   0xFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFF,
	}

	// CRC-16/XMODEM标准配置
	CRC16_XMODEM = Config{
		Width:  16,
		Poly:   0xA001,
		Init:   0x00,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00,
	}

	// CRC-16/DNP标准配置
	CRC16_DNP = Config{
		Width:  16,
		Poly:   0x3D65,
		Init:   0x0000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFF,
	}

	// CRC-16/ANSI标准配置
	CRC16_ANSI = Config{
		Width:  16,
		Poly:   0xA001,
		Init:   0x0000,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x0000,
	}

	// CRC-16/CCITT-Kermit标准配置
	CRC16_CCITT_KERMIT = Config{
		Width:  16,
		Poly:   0x1021,
		Init:   0x0000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000,
	}

	// CRC-16/GENERIC标准配置
	CRC16_GENERIC = Config{
		Width:  16,
		Poly:   0xA001,
		Init:   0x0000,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x0000,
	}

	// CRC-16/CCITT-TRUE标准配置
	CRC16_CCITT_TRUE = Config{
		Width:  16,
		Poly:   0x1021,
		Init:   0x0000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000,
	}

	// CRC-24/OPENPGP标准配置
	CRC24_OPENPGP = Config{
		Width:  24,
		Poly:   0x864CFB,
		Init:   0xB704CE,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x000000,
	}

	// CRC-32标准配置
	CRC32 = Config{
		Width:  32,
		Poly:   0x04C11DB7,
		Init:   0xFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFFFFFF,
	}

	// CRC-32/MPEG-2标准配置
	CRC32_MPEG2 = Config{
		Width:  32,
		Poly:   0x04C11DB7,
		Init:   0xFFFFFFFF,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00000000,
	}

	// CRC-32/PKZIP标准配置
	CRC32_PKZIP = Config{
		Width:  32,
		Poly:   0xEDB88320,
		Init:   0xFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFFFFFF,
	}

	// CRC-32C标准配置
	CRC32C = Config{
		Width:  32,
		Poly:   0x82F63B78,
		Init:   0xFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFFFFFF,
	}

	// CRC-32/CASTAGNOLI标准配置
	CRC32_CASTAGNOLI = Config{
		Width:  32,
		Poly:   0x1EDC6F41,
		Init:   0xFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0xFFFFFFFF,
	}

	// CRC-32/ADLER32标准配置
	CRC32_ADLER32 = Config{
		Width:  32,
		Poly:   0xFFFFFFFF,
		Init:   0x01,
		RefIn:  false,
		RefOut: false,
		XorOut: 0x00000000,
	}

	// CRC-64/ECMA标准配置
	CRC64_ECMA = Config{
		Width:  64,
		Poly:   0x42F0E1EBA9EA3693,
		Init:   0x0000000000000000,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000000000000000,
	}

	// CRC-64/ISO标准配置
	CRC64_ISO = Config{
		Width:  64,
		Poly:   0x42F0E1EBA9EA3693,
		Init:   0xFFFFFFFFFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000000000000000,
	}

	// CRC-64/WEIERSTRASS标准配置
	CRC64_WEIERSTRASS = Config{
		Width:  64,
		Poly:   0x42F0E1EBA9EA3693,
		Init:   0xFFFFFFFFFFFFFFFF,
		RefIn:  true,
		RefOut: true,
		XorOut: 0x0000000000000000,
	}
)

CRC算法的标准配置

View Source
var (
	// CRC-4/ITU标准配置工厂
	CRC4_ITUFactory = NewCachedFactory(CRC4_ITU)
	// CRC-5/EPC标准配置工厂
	CRC5_EPCFactory = NewCachedFactory(CRC5_EPC)
	// CRC-5/ITU标准配置工厂
	CRC5_ITUFactory = NewCachedFactory(CRC5_ITU)
	// CRC-5/USB标准配置工厂
	CRC5_USBFactory = NewCachedFactory(CRC5_USB)
	// CRC-6/ITU标准配置工厂
	CRC6_ITUFactory = NewCachedFactory(CRC6_ITU)
	// CRC-7/MMC标准配置工厂
	CRC7_MMCFactory = NewCachedFactory(CRC7_MMC)
	// CRC-8标准配置工厂
	CRC8Factory = NewCachedFactory(CRC8)
	// CRC-8/ATM标准配置工厂
	CRC8_ATMFactory = NewCachedFactory(CRC8_ATM)
	// CRC-8/CDMA2000标准配置工厂
	CRC8_CDMA2000Factory = NewCachedFactory(CRC8_CDMA2000)
	// CRC-8/DALLAS/1-WIRE标准配置工厂
	CRC8_DALLAS_1WIREFactory = NewCachedFactory(CRC8_DALLAS_1WIRE)
	// CRC-8/ITU标准配置工厂
	CRC8_ITUFactory = NewCachedFactory(CRC8_ITU)
	// CRC-8/ROHC标准配置工厂
	CRC8_ROHCFactory = NewCachedFactory(CRC8_ROHC)
	// CRC-8/MAXIM标准配置工厂
	CRC8_MAXIMFactory = NewCachedFactory(CRC8_MAXIM)
	// CRC-16/IBM标准配置工厂
	CRC16_IBMFactory = NewCachedFactory(CRC16_IBM)
	// CRC-16/MAXIM标准配置工厂
	CRC16_MAXIMFactory = NewCachedFactory(CRC16_MAXIM)
	// CRC-16/USB标准配置工厂
	CRC16_USBFactory = NewCachedFactory(CRC16_USB)
	// CRC-16/MODBUS标准配置工厂
	CRC16_MODBUSFactory = NewCachedFactory(CRC16_MODBUS)
	// CRC-16/DNP标准配置工厂
	CRC16_DNPFactory = NewCachedFactory(CRC16_DNP)
	// CRC-16/ANSI标准配置工厂
	CRC16_ANSIFactory = NewCachedFactory(CRC16_ANSI)
	// CRC-16/XMODEM标准配置工厂
	CRC16_XMODEMFactory = NewCachedFactory(CRC16_XMODEM)
	// CRC-16/CCITT标准配置工厂
	CRC16_CCITTFactory = NewCachedFactory(CRC16_CCITT)
	// CRC-16/CCITT-FALSE标准配置工厂
	CRC16_CCITT_FALSEFactory = NewCachedFactory(CRC16_CCITT_FALSE)
	// CRC-16/CCITT-Kermit标准配置工厂
	CRC16_CCITT_KERMITFactory = NewCachedFactory(CRC16_CCITT_KERMIT)
	// CRC-16/X25标准配置工厂
	CRC16_X25Factory = NewCachedFactory(CRC16_X25)
	// CRC-32标准配置工厂
	CRC32Factory = NewCachedFactory(CRC32)
	// CRC-32/MPEG-2标准配置工厂
	CRC32_MPEG2Factory = NewCachedFactory(CRC32_MPEG2)
	// CRC-32/PKZIP标准配置工厂
	CRC32_PKZIPFactory = NewCachedFactory(CRC32_PKZIP)
	// CRC-32C标准配置工厂
	CRC32CFactory = NewCachedFactory(CRC32C)
	// CRC-24/OPENPGP标准配置工厂
	CRC24_OPENPGPFactory = NewCachedFactory(CRC24_OPENPGP)
	// CRC-64/ECMA标准配置工厂
	CRC64_ECMAFactory = NewCachedFactory(CRC64_ECMA)
	// CRC-64/ISO标准配置工厂
	CRC64_ISOFactory = NewCachedFactory(CRC64_ISO)
	// CRC-64/WEIERSTRASS标准配置工厂
	CRC64_WEIERSTRASSFactory = NewCachedFactory(CRC64_WEIERSTRASS)
	// CRC-32/CASTAGNOLI标准配置工厂
	CRC32_CASTAGNOLIFactory = NewCachedFactory(CRC32_CASTAGNOLI)
	// CRC-16/GENERIC标准配置工厂
	CRC16_GENERICFactory = NewCachedFactory(CRC16_GENERIC)
	// CRC-16/CCITT-TRUE标准配置工厂
	CRC16_CCITT_TRUEFactory = NewCachedFactory(CRC16_CCITT_TRUE)
	// CRC-32/ADLER32标准配置工厂
	CRC32_ADLER32Factory = NewCachedFactory(CRC32_ADLER32)
)

预定义标准工厂

Functions

This section is empty.

Types

type Calculator

type Calculator interface {
	Compute(data []byte) uint64 // 计算数据的CRC校验值
	Reset()                     // 重置计算器状态
}

Calculator 定义CRC计算器接口

func New

func New(cfg Config) (Calculator, error)

New 创建CRC计算器实例 参数: cfg - CRC算法配置 返回: 计算器实例

type Config

type Config struct {
	Width  uint   // 校验位宽 (8/16/24/32/64)
	Poly   uint64 // 生成多项式 (需注意位宽对齐)
	Init   uint64 // 初始值
	RefIn  bool   // 输入数据字节位反转
	RefOut bool   // 输出结果位反转
	XorOut uint64 // 最终异或值
}

Config 表示CRC算法的配置结构体

type Factory

type Factory interface {
	Create() (Calculator, error) // 创建计算器实例,返回错误
}

Factory 定义计算器工厂接口

func NewCachedFactory

func NewCachedFactory(cfg Config) Factory

NewCachedFactory 创建带缓存的工厂 参数: cfg - CRC配置 返回: 工厂实例 (线程安全)

func NewFactory

func NewFactory(cfg Config) (Factory, error)

NewFactory 创建标准工厂 参数: cfg - CRC配置 返回: 工厂实例

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL