Функция crc32.New

Функция crc32.New создает новый хеш для вычисления контрольной суммы CRC-32. В отличие от crc32.NewIEEE, эта функция принимает в качестве аргумента таблицу полинома, что позволяет использовать различные варианты CRC-32. Если передать nil, будет использована стандартная таблица IEEE. Функция возвращает интерфейс hash.Hash32, который реализует методы Write для добавления данных и Sum32 для получения 32-битной контрольной суммы.

Синтаксис

gocrc32.New(tab *crc32.Table) hash.Hash32

Пример с таблицей IEEE

Давайте создадим хеш со стандартной таблицей IEEE и вычислим контрольную сумму для строки "abcde":

gopackage main

import (
  "fmt"
  "hash/crc32"
)

func main() {
  // Create a new CRC-32 hash with IEEE table
  h := crc32.New(crc32.IEEETable)

  // Write data to the hash
  h.Write([]byte("abcde"))

  // Get the checksum
  res := h.Sum32()
  fmt.Println(res)
}

Результат выполнения кода:

go1585201610

Пример с таблицей Castagnoli

Давайте создадим хеш с таблицей Castagnoli и вычислим контрольную сумму для строки "abcde":

gopackage main

import (
  "fmt"
  "hash/crc32"
)

func main() {
  // Create a new CRC-32 hash with Castagnoli table
  h := crc32.New(crc32.MakeTable(crc32.Castagnoli))

  // Write data to the hash
  h.Write([]byte("abcde"))

  // Get the checksum
  res := h.Sum32()
  fmt.Println(res)
}

Результат выполнения кода:

go4006049583

Пример с nil таблицей

Давайте передадим nil в качестве аргумента и убедимся, что будет использована таблица IEEE:

gopackage main

import (
  "fmt"
  "hash/crc32"
)

func main() {
  // Create a new CRC-32 hash with nil (will use IEEE table)
  h := crc32.New(nil)

  // Write data to the hash
  h.Write([]byte("abcde"))

  // Get the checksum
  res := h.Sum32()
  fmt.Println(res)
}

Результат выполнения кода:

go1585201610

Пример пошагового обновления

Давайте добавим данные частями и получим итоговую контрольную сумму:

gopackage main

import (
  "fmt"
  "hash/crc32"
)

func main() {
  // Create a new CRC-32 hash
  h := crc32.New(crc32.IEEETable)

  // Write data in parts
  h.Write([]byte("ab"))
  h.Write([]byte("cd"))
  h.Write([]byte("e"))

  // Get the final checksum
  res := h.Sum32()
  fmt.Println(res)
}

Результат выполнения кода:

go1585201610

Смотрите также

  • функцию crc32.Checksum,
    которая вычисляет контрольную сумму CRC-32 для слайса байт
  • функцию crc32.ChecksumIEEE,
    которая вычисляет контрольную сумму CRC-32 IEEE для слайса байт
  • функцию crc32.NewIEEE,
    которая создает хеш CRC-32 IEEE без указания таблицы
  • функцию hash.Hash32,
    которая описывает интерфейс для 32-битных хеш-функций