資源簡(jiǎn)介
每讀取一行,解析出type,length,address,并將data指向另外一個(gè)指針
代碼片段和文件信息
#if?0
#include?
#include?
#include?
#include?
#include?
#define?MAX_EXTENSION_SIZE?16
#define?MAX_LINE_SIZE?1024
#define?MAX_FILE_NAME_SIZE?260
typedef?char?filetype[MAX_FILE_NAME_SIZE];
filetype????Filename;??
FILE?*fin*fout;
int?filemode;
unsigned?char?Ascii2Int(unsigned?char?tmp0?unsigned?char?tmp1)
{
????unsigned?char?s[2];
????unsigned?char?value;
????s[0]?=?0;
????s[1]?=?0;
????if?(tmp0?>=?‘0‘?&&?tmp0?<=?‘9‘)
????????s[0]?=?tmp0?-?‘0‘;
????else?if?(tmp0?>=?‘a(chǎn)‘?&&?tmp0?<=‘f‘)
????????s[0]?=?tmp0?-?‘a(chǎn)‘?+?0xA;
????else?if?(tmp0?>=?‘A‘?&&?tmp0?<=?‘F‘)?
????????s[0]?=?tmp0?-?0x61?+?0XA;
????if?(tmp1?>=?‘0‘?&&?tmp1?<=?‘9‘)
????????s[1]?=?tmp1?-?‘0‘;
????else?if?(tmp1?>=?‘a(chǎn)‘?&&?tmp1?<=?‘f‘)
????????s[1]?=?tmp1?-?‘a(chǎn)‘?+?0xA;
????else?if?(tmp1?>=?‘A‘?&&?tmp1?<=?‘F‘)
????????s[1]?=?tmp1?-?‘A‘?+?0xA;
????value?=?s[0]<<4;
????value?=?value?+?s[1];
????return?value;
}
void?PutExtension(char?*Flnm?char?*Extension)
{
????char?*Period;????????/*?location?of?period?in?file?name?*/
????char?Samename?=?-1;
????/*?This?assumes?DOS?like?file?names?*/
????/*?Don‘t?use?strchr():?consider?the?following?filename:
?????../my.dir/file.hex
????*/
????if?((Period?=?strrchr(Flnm‘.‘))?!=?NULL)
????????*(Period)?=?‘\0‘;
????if?(strcmp(Extension?Period?+?1)?==?0)
????????Samename?=?0;
????strcat(Flnm“.“);
????strcat(Flnm?Extension);
????if?(0?==?Samename)?{
????????printf?(“Input?and?output?filenames?(%s)?are?the?same.“?Flnm);
????}
}
int?main(int?argc?char?*argv[])
{
????unsigned?char?tmp[2];
????char?buf[20];
????unsigned?char?value?=?0;
????unsigned?char?chksum?=?0;
????unsigned?char?num?=?0;
????unsigned?char?func?=?0xff;
????int?addr?=?0;
????int?size?=?0;
????/*?line?inputted?from?file?*/
????char?Line[MAX_LINE_SIZE];
????char?Extension[MAX_EXTENSION_SIZE];?
????strcpy(Extension?“bin“);
????/*讀取文件名*/
????strncpy(Filename?argv[argc?-1]?sizeof(Filename));
????/*打開(kāi)或創(chuàng)建兩個(gè)文件*/
????fin?=?fopen(Filename?“r“);
????PutExtension(Filename?Extension);
????fout?=?fopen(Filename“wb“);
????while(!feof(fin))
????{
????????/*讀取一行數(shù)據(jù),以‘s‘開(kāi)始*/
????????while?(1)?{
????????????fread(tmp?sizeof(char)?1?fin);
????????????/*尋找行首*/
????????????if?(tmp[0]==‘S‘||tmp[0]==‘s‘)
????????????????break;
????????????if?(feof(fin))?{
????????????????fclose(fin);
????????????????fclose(fout);
????????????????printf(“file?convert?ok!\n“);
????????????????return;
????????????}
????????}
????????chksum?=?0;
????????addr?=?0;
????????/*讀取‘s‘后面的字符:?type*/
????????fread(tmp?sizeof(char)?1?fin);
????????func?=?tmp[0];
????????/*獲取數(shù)據(jù)數(shù)量,兩個(gè)字符:?count*/
????????fread(tmp?sizeof(char)?2?fin);
????????num?=?Ascii2Int(tmp[0]?tmp[1]);
????????chksum?+=?num;
????????/*類(lèi)型type?處理每一行的地址address數(shù)據(jù)*/
????????switch?(func)?{
????????case?‘0‘:
????????????????fread(tmp?sizeof(char)?2?fin);
????????????????valu
評(píng)論
共有 條評(píng)論