在使用串口调试工具的时候,往往需要输入指令+校验,校验都需要自己去计算,没有合适的计算器,计算很麻烦,所以想这自己写一个,以便于今后使用,同时分享给大家。
这里只用了一种我们常用的算法,如果需要其他算法,可以自行增加功能,或者联系我。
使用说明:
----------->Ox16进制指令集校验码计算器<-----------
【1】本程序适用于16进制指令校验码计算
【2】例如需要校验的指令为EE0101010000,中间可以有空格,EE 01 01 01 00 00 两两1组,最大支持31组
【3】支持粘贴输入多条指令,每行1条指令
【4】采用算法为: 校验码=(OxEE + Ox01 + Ox01 + Ox01 + Ox00 + Ox00) % 256 = OxF1
【5】在当前目录自动生成“校验码.txt”文件,以每次启动程序时间位标识
【6】重新生产“校验码.txt”文件,将原文件删除或备份到其他目录即可
【7】退出程序,输入“exit”或者“EXIT”
ps:输入非法字符,会报错,返回重新输入
代码如下:(如有其他算法,可扩展)
#define _CRT_SECURE_NO_WARNINGS
#include<string>
#include<iostream>
#include<fstream>
#include<ctime>
#include<Windows.h>
#include<iomanip>
using namespace std;
void start();
//16进制 A~F 或者 a~f 转换为数字 10~15
int AtoI(char& ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
else if (ch >= 'a')
return ch - 'a' + 10;
else
return ch - 'A' + 10;
}
//10进制>=10的数字转化为 A~F
char ItoA(int& ci)
{
char ch;
if (ci >= 0 && ci <= 9)
ch = (char)('0' + ci);
else
ch = (char)('A' + ci - 10);
return ch;
}
//字符串转换为数组
void str_int(string& str, int& len, int* pin)
{
int j = 0;
for (int i = 0; i < len; ++i)
{
if (str[i] - ' ' == 0)
continue;
if (str[i] - '0' >= 0 && str[i] - '0' <= 9 || str[i] - 'A' >= 0 && str[i] - 'A' <= 5 || str[i] - 'a' >= 0 && str[i] - 'a' <= 5)
pin[j++] = AtoI(str[i]);
else
{
cout << "输入错误,按任意键返回" << endl;
cin.get();
start();//返回循环程序
}
}
//将数组实际大小引用返回
len = j;
}
//数组转换为字符串
void int_str(int* in, int size, char* str)
{
for (int i = 0; i < size; ++i)
{
str[i] = ItoA(in[i]);
}
}
void start()
{
//用于记录校验码
ofstream fd("校验码.txt", ios::app);
if (!fd