#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
struct M
{
int hegiht;
int low;
};
struct MM
{
M m1;
M m2;
};
MM add(MM g1, MM g2)
{
MM demo;
int f[4] = { 0 };
int ff[4] = { 0 };
int c1, c2, c3, c4;
c1 = g1.m2.low + g2.m2.low;
if (c1 >= 16) f[3] = 1;
c2 = g1.m2.hegiht + g2.m2.hegiht;
if (c2 >= 16) f[2] = 1;
c3 = g1.m1.low + g2.m1.low;
if (c3 >= 16) f[1] = 1;
c4 = g1.m1.hegiht + g2.m1.hegiht;
if (c4 >= 16)f[0] = 1;
/* if ((c1 + f[0]) / 16) ff[3] = 1;
demo.m2.low = (c1 + f[0]) % 16;
if ((c2 + f[3] + ff[3]) / 16) ff[2] = 1;
demo.m2.hegiht = (c2 + f[3]+ff[3]) % 16;
if ((c3 + f[2] + ff[2]) / 16) ff[1] = 1;
demo.m1.low = (c3 + f[2]+ff[2]) % 16;
demo.m1.hegiht = (c4 + f[1]+ff[1]) % 16;*/
demo.m2.low = (c1 + f[0]) % 16;
demo.m2.hegiht = (c2 + f[3]) % 16;
demo.m1.low = (c3 + f[2]) % 16;
demo.m1.hegiht = (c4 + f[1]) % 16;
return demo;
}
void show(MM key)
{
char a, b, c, d;
if (key.m1.hegiht>9)a = key.m1.hegiht - 10 + 'A';
else a = key.m1.hegiht + '0';
if (key.m1.low>9)b = key.m1.low - 10 + 'A';
else b = key.m1.low + '0';
if (key.m2.hegiht>9)c = key.m2.hegiht - 10 + 'A';
else c = key.m2.hegiht + '0';
if (key.m2.low>9)d = key.m2.low - 10 + 'A';
else d = key.m2.low + '0';
cout<<a<<b<<c<<d<<endl;
}
int main()
{
FILE *fp;
char ch;//保存每个字节
int chh, chl;//保存字符的高位和低位
MM u1, key;
key.m1.hegiht = 0;
key.m1.low = 0;
key.m2.hegiht = 0;
key.m2.low = 0;
int fl;
unsigned int count = 0, checknum = 0, k = 0;
unsigned long int sum = 0;
if ((fp = fopen("1.txt", "r")) == NULL)
cout << "file open error!";
while (true)
{
if ((ch = fgetc(fp)) != EOF)
{
chh = (int)ch / 16;
chl = (int)ch % 16;
count = count % 2;
switch (count)
{
case 0:
{
u1.m1.hegiht = chh;
u1.m1.low = chl;
break;
}
case 1:
{
u1.m2.hegiht = chh;
u1.m2.low = chl;
key = add(key, u1);
}
}
count++;
//cout<<key.m1.hegiht<<key.m1.low<<key.m2.hegiht<<key.m2.low<<endl;
}
else
{
break;//当读取到最后,则退出循环
}
}
if (count == 0)
{
u1.m2.hegiht = 0;
u1.m2.low = 0;
key = add(key, u1);
}
show(key);
fclose(fp);
}
算法思路:
打开要校验的文本文件,
每个字符得读取,直到读取到文件最后
通过该字符的acaii变化成16进制表示
然后保存并和下一个字符组成一个双16进制表示的数值
然后累加
返回累加值