📄 framer.cpp
字号:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
int i,j,t,k;
char order[120];//存储输入的命令行
char framer[40];//存储输入的命令段
char filename1[40];//存储输入的源文件名
char filename2[40];//存储输入的目的文件名
unsigned char CRC;
void *buf;
unsigned char *buffer;
// clrscr();
while(1)
{
printf("Input the order:('exit' to quit)\n\n");
printf(">>:");
gets(order);
if(strcmp(order,"exit")==0)
exit(0);
t=0;
for(i=0;(order[i]!=' ')&&(order[i]!=0);i++)
framer[t++]=order[i];
framer[t]=0;
while(order[t]==' ')t++;
k=0;
for(i=t;order[i]!=' ';i++)
filename1[k++]=order[i];
filename1[k]=0;
t=0;
while(order[i]==' ')i++;//去掉命令行中间的空格
for(j=i;order[j]!=0;j++)
filename2[t++]=order[j];
filename2[t]=0;
puts(framer);
puts(filename1);
puts(filename2);
if(strcmp(framer,"framer")==0)
{
FILE *fp,*fp1;
if((fp=fopen(filename1,"rb"))==NULL)
{
printf("Open inputfile error!\n");
continue;//打开源文件错误
}
if((fp1=fopen(filename2,"wb+"))==NULL)
{
printf("Open outputfile error!\n");
continue;//打开目的文件错误
}
printf("Open file success!\n\n");
fseek(fp,0,2);
int inputsize=ftell(fp);
printf("the size of the inputfile is:%4d\n\n",inputsize);
if(inputsize<46)
{
buf=malloc(46);//数据段长度小于46字节
}
else if(inputsize>1500)
{
printf("The size of the data is to lage(46-1500)\n\n");
continue;
}
else
buf=malloc(inputsize);
rewind(fp);
char ch;
ch=0xAA;
for(i=0;i<7;i++)
fprintf(fp1,"%c",ch);//写入前导码
ch=0xAB;
fprintf(fp1,"%c",ch);//写入定界符
char sh[6]={0x00,0x00,0xE4,0x86,0x3A,0xDC};
for(i=0;i<6;i++)
fprintf(fp1,"%c",sh[i]);
char sh1[6]={0x00,0x00,0x80,0x1A,0xE6,0x65};
for(i=0;i<6;i++)
fprintf(fp1,"%c",sh1[i]);//写入目的地址和源地址
fwrite(&inputsize,2,1,fp1);//写入数据段大小
rewind(fp);
fread(buf,inputsize,1,fp);
fwrite(buf,inputsize,1,fp1);
if(inputsize<46)
{
for(i=inputsize;i<46;i++)
fprintf(fp1,"%c",0x00);
}//如果数据段长度小于46字节,填充0
fseek(fp1,0,2);
int outputsize=ftell(fp1);
buffer=(unsigned char*)malloc(outputsize+1);
rewind(fp1);
fread(buffer,1,outputsize,fp1);
buffer[outputsize]=0x00;
CRC=0x00;//用CRC代表寄存器中的值进行移位操作
for(i=8;i<=outputsize;i++)//从目的地址开始计算
{
for(j=7;j>=0;j--)
{
int in=(buffer[i]>>j)&0x01;//输入位是否为1
int a=(CRC>=0x80);//寄存器头位是否为1
if(a)
{
CRC=CRC^0x03;
CRC=CRC<<1;
if(!in)
CRC+=0x01;
}
if(!a)
{
CRC=CRC<<1;
if(in)
CRC+=0x01;
}
}
}//生成CRC校验码。
printf("CRC=%02XH\n\n",CRC);
fseek(fp1,0,2);
fprintf(fp1,"%c",CRC);
delete(buf);
delete(buffer);
fclose(fp);
fclose(fp1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -