如何在Arduino / C ++中计算校验和?

问题描述 投票:0回答:1

我正在开发ESP32(Arduino)接口以与指纹设备进行通信。但是我不知道校验和。我找到了有关指纹设备的文档,如下所示。

enter image description here

例如,跟随某些数据包:

enter image description here

这里是相应命令包的校验和。[06 01,F7 02,FA 02,F8 03,FA 02,F9 03

我的问题是如何在Arduino / C ++中计算新数据包的校验和:

数据包是:

AA 55 04 01 04 00 00 00 F4 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00? ??

将是什么过程?

谢谢!

c++ arduino checksum esp32
1个回答
0
投票

该规范编写得很差并且含糊不清,但是仅将消息中的所有字节加起来并取结果的低2个字节似乎会产生正确的校验和:

#include <vector>
#include <cstdint>
#include <iostream>
#include <iomanip>

int main()
{
    std::vector<uint8_t> data{ 0x55, 0xaa, 0x03, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    int sum = 0;
    for (auto x : data)
    {
        sum += x;
    }
    uint8_t sum1 = static_cast<uint8_t>(sum & 0xFF);
    uint8_t sum2 = static_cast<uint8_t>((sum >> 8) & 0xFF);
    std::cout << std::setfill('0') << std::hex <<
        std::setw(2) << static_cast<int>(sum1) << " " <<
        std::setw(2) << static_cast<int>(sum2) << "\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.