📄 demodata.cpp
字号:
#include "stdafx.h"
#include "DemoData.h"
#include "ZCRC.h"
//////////////////////////////////////////////////////////////////////
// CDemoData 类的成员
//////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------
// CDemoData 类的构造方法和析构方法
CDemoData::CDemoData(CCryptorTool1 *pCT)
{
pCryptTool = pCT;
}
CDemoData::~CDemoData()
{
}
//-------------------------------------------------------------------
// CDemoData 类的公共方法
void CDemoData::SetCryptorTool(CCryptorTool1 *pCT)
{
pCryptTool = pCT;
}
//共128字节
void CDemoData::ToBuffer(unsigned char *Buffer)
{
unsigned char B[128];
unsigned char *p=B;
unsigned long l;
memset(B,0,128);
memcpy(p,Name, 12); p += 12;
memcpy(p,&Code, 4); p += 4;
memcpy(p,IDCard, 20); p += 20;
memcpy(p,Address,64); p += 64;
l = CZCRC::CRC32(B,120);
memcpy(B+120,&l,4);
pCryptTool->Encrypt(Buffer,B,128);
}
//共128字节
int CDemoData::FromBuffer(unsigned char *Buffer)
{
unsigned char B[128];
unsigned char *p=B;
unsigned long l0,l;
pCryptTool->Decrypt(B,Buffer,128);
memcpy(&l0,B+120,4);
l = CZCRC::CRC32(B,120);
if (l!=l0) return 0; //校验失败
memcpy(Name, p,12); p += 12;
memcpy(&Code, p, 4); p += 4;
memcpy(IDCard, p,20); p += 20;
memcpy(Address,p,64); p += 64;
return 1;
}
void CDemoData::ToFile(const char *FileName)
{
int i;
unsigned char B[128];
FILE *fp;
ToBuffer(B);
fp = fopen(FileName,"wt");
for (i=0;i<128;i++) {
if ((i%16)==0) fprintf(fp,"\n");
fprintf(fp," %02X",B[i]);
}
fprintf(fp,"\n");
fclose(fp);
}
int CDemoData::FromFile(const char *FileName)
{
int i,j,k;
char s[16];
unsigned char B[128];
FILE *fp;
fp = fopen(FileName,"rt");
memset(B,0,128);
i=0; j=0;
while (!feof(fp)) {
k = fgetc(fp);
if ((k==' ')||(k=='\t')||(k=='\n')) {
if (j>0) {
s[j]=0;
B[i++]=HexToInt(s);
j=0;
}
continue;
}
s[j++]=k;
}
fclose(fp);
k=FromBuffer(B);
return k;
}
//-------------------------------------------------------------------
//十六进制字符串转化为整数(只转化两位)
int CDemoData::HexToInt(const char *s)
{
int m0,m1;
m0 = toupper(s[0]) & 0xFF;
m1 = toupper(s[1]) & 0xFF;
if (m0>'9') m0 -= ('A'-'9'-1);
if (m1>'9') m1 -= ('A'-'9'-1);
m0 -= '0';
m1 -= '0';
return ( (m0<<4) + m1 );
}
//-------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -