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