16进制 指令集 校验码 计算器,文件输出计算结果

在使用串口调试工具的时候,往往需要输入指令+校验,校验都需要自己去计算,没有合适的计算器,计算很麻烦,所以想这自己写一个,以便于今后使用,同时分享给大家。

这里只用了一种我们常用的算法,如果需要其他算法,可以自行增加功能,或者联系我。

使用说明:

----------->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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值