如何从需要每个元素不同字节长度的外部二进制文件中读取数据?

萨尔丁8R

这是情况。我必须从外部二进制文件中读取数据并按顺序显示数据,这样对用户才有意义。

该文件的数据存储如下:前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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何读取“字”具有不同字节长度的二进制数据文件?

读取内部具有不同字节长度值的二进制文件

读取二进制文件并遍历每个字节

如何逐字节读取二进制文件?

如何在Julia中读取(二进制)文件的后x个字节?

如何连续读取Crystal中的二进制文件并从中获取字节?

如何从dicom文件读取二进制数据?

从文件中读取双二进制数据

从C中的二进制文件读取数据

二进制文件对于一次读取的字节数读取不同的结果

如何从二进制文件中读取除最后X个字节以外的所有字节?

如何在pyspark中读取二进制数据

从二进制文件中读取

如何在Julia中读取二进制文件?

如何在Go中读取二进制文件

如何从C中的文件读取二进制输入

如何从二进制文件中读取倒数?

无法读取Lua 5.1上二进制文件的每个字节

如何从二进制文件中读取数据并在c中创建列表?

获取存储在存储二进制数据的数据列中的字节长度

Shell:如何读取二进制文件的字节并以十六进制打印?

如何在C++中以相反的顺序读取二进制数据文件

读取二进制平面文件并跳过字节

C:从二进制文件读取字节

在VB.NET中读取时,从文件中排除二进制数据的前“ x”个字节

java-从二进制文件中读取arraylist集合,并在新数组中分配每个元素

霍夫曼压缩读取文件不会复制二进制文件C ++中的所有字节

从二进制文件读取n个字节,直到verilog中的文件结尾

成功读取文件中的ascii标头后如何从文件中读取二进制数据