如何计算 Arduino/C++ 中的校验和?
How to Calculate Checksum in Arduino/C++?
我正在开发一个 ESP32(Arduino) 接口来与指纹设备通信。
但我不知道校验和。
我找到了指纹设备的文档,如下所示。
例如部分数据包如下:
这里是对应命令包的校验和。
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 ?? ??
流程是什么?
谢谢!
规范写得非常糟糕且含糊不清,但仅将消息中的所有字节相加并取结果的低 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";
}
我正在开发一个 ESP32(Arduino) 接口来与指纹设备通信。 但我不知道校验和。 我找到了指纹设备的文档,如下所示。
例如部分数据包如下:
这里是对应命令包的校验和。 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 ?? ??
流程是什么?
谢谢!
规范写得非常糟糕且含糊不清,但仅将消息中的所有字节相加并取结果的低 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";
}