c语言读txt,每行有32个16进制数,每8个数存到数组里
时间: 2024-03-16 16:45:43 浏览: 15
可以按照以下步骤读取txt文件中的数据,并将每8个16进制数存储到数组中:
1. 打开文件,使用fopen函数打开txt文件,以只读方式打开,获取文件指针。
2. 读取文件,使用fgets函数逐行读取txt文件中的数据。
3. 将每行数据按照16进制数的格式读取到数组中,使用sscanf函数将每行数据按照16进制格式读取到一个数组中,每8个数存储到一个数组中。
4. 关闭文件,使用fclose函数关闭文件指针。
下面是一个示例代码:
```c
#include <stdio.h>
#define MAX_LINE_LEN 1024
#define MAX_NUMS_PER_LINE 32
#define NUMS_PER_ARRAY 8
int main() {
FILE *fp;
char line[MAX_LINE_LEN];
int nums[MAX_NUMS_PER_LINE];
int array[NUMS_PER_ARRAY];
int i, j, k;
fp = fopen("test.txt", "r");
if (!fp) {
printf("Failed to open file\n");
return -1;
}
while (fgets(line, MAX_LINE_LEN, fp)) {
j = 0;
for (i = 0; i < MAX_NUMS_PER_LINE; i++) {
if (sscanf(line + j, "%x", &nums[i]) != 1) {
break;
}
j += 2; // 每个16进制数占2个字符
}
// 将每8个数存储到数组中
for (i = 0, k = 0; i < MAX_NUMS_PER_LINE && k < NUMS_PER_ARRAY; i += NUMS_PER_ARRAY, k++) {
array[k] = nums[i];
array[k] = (array[k] << 8) | nums[i + 1];
array[k] = (array[k] << 8) | nums[i + 2];
array[k] = (array[k] << 8) | nums[i + 3];
array[k] = (array[k] << 8) | nums[i + 4];
array[k] = (array[k] << 8) | nums[i + 5];
array[k] = (array[k] << 8) | nums[i + 6];
array[k] = (array[k] << 8) | nums[i + 7];
}
// 输出结果
for (i = 0; i < NUMS_PER_ARRAY; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
fclose(fp);
return 0;
}
```
需要注意的是,该示例代码仅适用于每行数据都是32个16进制数的情况。如果每行数据的个数不一定是32,需要根据实际情况修改代码。