生成多项式为 CRC-8 x8+x5+x4+1 0x31(0x131)
小端格式,小端格式,小端格式
代码:
#include <iostream>
#include <sstream>
#include <iomanip>
#include <stdio.h>
#include <stdint.h>
/* 生成多项式为 CRC-8 x8+x5+x4+1 0x31(0x131)小端顺序 */
uint8_t crc_high_first(uint8_t *ptr)//, uint8_t len)
{
uint8_t len=5;
uint8_t i;
uint8_t crc = 0x00; /* 计算的初始 CRC 值 */
while(len--)
{
crc ^= *ptr++; /* 每次先与需要计算的数据异或,计算完指向下一数据 */
for (i = 8; i > 0; --i) /* 下面这段计算过程与计算一个字节 CRC 一样 */
{
if (crc & 0x80)
crc = (crc << 1) ^ 0x31;
else
crc = (crc << 1);
}
}
return crc;
}
/*十进制转16进制*/
std::string decToHex(int decimal) {
std::stringstream ss;
ss << std::hex << decimal;
return ss.str();
}
/*主代码*/
int main(uint8_t len, uint8_t crc)
{
//uint8_t xxx[5]={0x07,0x00,0x00,0x05,0xAD};
uint8_t xxx[5]={0x0D,0x00,0x00,0x00,0x00};
crc=crc_high_first(xxx);//,len);
int decimalNumber = crc;
std::string hexString = decToHex(decimalNumber);
//std::cout << "The hexadecimal of " << decimalNumber << " is " << hexString << std::endl;
std::cout << hexString << std::endl;
return 0;
}