这是一个.S19文件的内容,S00600004844521B S1130000285F245F2212226A000424290008237C2A S11300100002000800082629001853812341001813 S113002041E900084E42234300182342000824A952 S107003000144ED492 S5030004F8 S9030000FC 用C语言将文件内容存入一个主函数外的静态数组中,逐行解析数组中的内容,数组中任何一行内容不符合.S19文件格式就输出错误
时间: 2024-02-21 16:59:46 浏览: 68
解析S19文件格式代码
好的,根据你的要求,我编写了如下的代码,可以将这个.S19文件的内容存入一个静态数组中,同时也能够逐行解析数组中的内容,如果有任何一行内容不符合.S19文件格式,就输出错误信息。代码如下:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINES 1000 //定义静态数组的最大行数
#define MAX_CHARS_PER_LINE 80 //定义每行最大字符数
char s19_lines[MAX_LINES][MAX_CHARS_PER_LINE+1]; //定义静态数组
int main() {
FILE *fp;
char line[MAX_CHARS_PER_LINE+1];
int line_count = 0;
fp = fopen("file.s19", "r"); //打开文件
if (fp == NULL) { //判断文件是否打开成功
printf("File open error!\n");
return -1;
}
//逐行读取文件内容,并存入静态数组中
while (fgets(line, MAX_CHARS_PER_LINE+1, fp) != NULL) {
if (line[0] == 'S') { //判断行首字符是否为'S'
strcpy(s19_lines[line_count], line);
line_count++;
if (line_count >= MAX_LINES) { //判断静态数组是否已满
printf("Array full! Can't store more lines!\n");
break;
}
} else { //行首字符不是'S',输出错误信息
printf("Line %d is invalid!\n", line_count+1);
}
}
fclose(fp); //关闭文件
//逐行解析静态数组中的内容
for (int i = 0; i < line_count; i++) {
char s_type = s19_lines[i][1];
int byte_count = strtol(&s19_lines[i][2], NULL, 16);
char tmp[3];
unsigned int address = 0;
for (int j = 0; j < 4; j++) {
strncpy(tmp, &s19_lines[i][4+j*2], 2);
tmp[2] = '\0';
address = (address << 8) | strtol(tmp, NULL, 16);
}
address &= 0xFFFFFF;
if (s_type == '1' || s_type == '9') {
printf("Line %d: Address = 0x%06X\n", i+1, address);
} else {
printf("Line %d is invalid!\n", i+1);
}
}
return 0;
}
```
这个代码会将.S19文件的内容存入一个静态数组中,并逐行解析数组中的内容。如果有任何一行内容不符合.S19文件格式,就会输出错误信息。你可以根据自己的需要修改文件名和数组大小等参数。
阅读全文