UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
CRC.hpp
[詳解]
1
//
2
// CRC
3
//
4
// Copyright (c) 2022-2024 udonrobo
5
//
6
7
#pragma once
8
9
#include <
Udon/Types/ArrayView.hpp
>
10
11
namespace
Udon
12
{
13
constexpr
size_t
CRC8_SIZE
= 1;
14
17
inline
uint8_t
CRC8
(
ArrayView<const uint8_t>
buffer)
18
{
19
uint8_t crc = 0xFF;
// initial value
20
21
for
(
const
auto
& it : buffer)
22
{
23
crc ^= it;
24
25
for
(uint8_t bit = 0; bit < 8
/* CHAR_BIT */
; ++bit)
26
{
27
if
(crc & 0x80)
28
{
29
crc = (crc << 1) ^ 0x1D;
// polynomial
30
}
31
else
32
{
33
crc <<= 1;
34
}
35
}
36
}
37
38
return
crc ^ 0xFF;
// final XOR
39
}
40
41
}
// namespace Udon
ArrayView.hpp
Udon::ArrayView
配列参照クラス
Definition
ArrayView.hpp:27
Udon
Definition
Bit.hpp:12
Udon::CRC8_SIZE
constexpr size_t CRC8_SIZE
Definition
CRC.hpp:13
Udon::CRC8
uint8_t CRC8(ArrayView< const uint8_t > buffer)
バイト列から CRC-8 値を計算する
Definition
CRC.hpp:17