这是情况。我必须从外部二进制文件中读取数据并按顺序显示数据,这样对用户才有意义。
该文件的数据存储如下:前4个字节是整数,然后下8个字节是浮点十进制,然后是下8个字节(浮点),依此类推。因此,我需要先读取4个字节,然后重复读取之后的8个字节...直到文件没有剩余数据可读取。
我已读取文件,将文件的数据存储到数组中i[NUM]
(NUM
元素的数量在其中),每个元素包含4个字节。通过这样做,我意外地将浮点数“拆分”为一半,前半部分存储在其中i[1]
,后半部分存储在中i[2]
,还有ini[3]
和中的浮点,依此类推i[4]
。
现在,我正在尝试将两个漂浮的两半重新“缝合”在一起以显示它们,但是我被困住了。
任何建议,不胜感激。
到目前为止,我的代码:
#include "stdafx.h"
#include "stdio.h"
#define NUM 15
int main(void)
{
//initialising
int i[NUM], j, k;
float temp[NUM];
char temp_c[NUM];
int element_size = 4;
int element_number = NUM;
for(k=0; k<NUM; k++)
{
i[k] = 0; //clear all cells in i[]
temp[k] = 0; //clear all cells in temp[]
}
//file reading
FILE *fp;
fp = fopen("C:\\data", "rb+");
fread(&i, element_size, element_number, fp); //reads 'data' to the end and then stores each element into array i[]
fclose(fp); //close the file
//arrange and print data here
printf("Data of File\n\nN = %d",i[0]);
//this is where the rest fell apart
//No idea how to go about it
return 0;
}
如果您确定float
是8个字节,又int
是4个字节,则可以执行此操作(可能是在循环中使用变量而不是我使用的固定索引):
memcpy(&temp[0], &i[1], 8);
我假设您用于创建文件的代码是fwrite
您编写4字节int然后编写8字节浮点数的地方。
然后,您可以使用printf("%f\n", temp[0]);
或其他方式输出浮点数。
注意 您可以通过直接初始化数组来避免初始化循环:int i[NUM] = { 0 };
etc。这仅适用于0
,不适用于其他值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句