fwrite单精度用fread双精度读取
时间: 2023-10-25 12:29:39 浏览: 89
可以使用以下方法将单精度浮点数使用`fwrite`写入文件,然后使用`fread`读取为双精度浮点数:
写入单精度浮点数:
```c
float value = 3.14;
FILE *file = fopen("data.bin", "wb");
fwrite(&value, sizeof(float), 1, file);
fclose(file);
```
读取双精度浮点数:
```c
double result;
FILE *file = fopen("data.bin", "rb");
fread(&result, sizeof(double), 1, file);
fclose(file);
```
在这个例子中,我们使用`fwrite`将单精度浮点数`value`写入名为"data.bin"的二进制文件。然后,使用`fread`从同一文件中读取一个双精度浮点数并存储在`result`变量中。请注意,读取时要使用双精度的`sizeof(double)`来指定要读取的字节数。
相关问题
常用的数据类型有字符型(char 型)、短整型(short 型)、整型(int 型)、长整型(long 型)、拓展长整型(long long 型)、单精度浮点型(float 型)、双精度浮点型(double 型)。问题围绕着数据类型与二进制文件展开。现有一个二进制文件,文件名为dict.dic,生成这个文件的C语言代码大概是这样的: 变量如下: char a,aa[5];//注意这里数组aa为正常使用的字符串,所以会包含字符'\0',它不需要输出 short b,bb[5]; int c,cc[5]; long d,dd[5]; long long e,ee[5]; float g,gg[5]; double h,hh[5]; int i ; 写入的代码段是这样: fwrite(&a,sizeof(a),1,fp); fwrite(&b,sizeof(b),1,fp); fwrite(&c,sizeof(c),1,fp); fwrite(&d,sizeof(d),1,fp); fwrite(&e,sizeof(e),1,fp); fwrite(&g,sizeof(g),1,fp); fwrite(&h,sizeof(h),1,fp); fwrite(aa,sizeof(a),5,fp); fwrite(bb,sizeof(b),5,fp); fwrite(cc,sizeof(c),5,fp); fwrite(dd,sizeof(d),5,fp); fwrite(ee,sizeof(e),5,fp); fwrite(gg,sizeof(g),5,fp); fwrite(hh,sizeof(h),5,fp); 这个代码段被连续执行了5次。当然每次写入的数据是不同的。 你的任务是从dict.dic中按照输入的顺序,读出7种单独变量,分别存到对应类型的变量中,假设为a、b、c、d、e、g、h。再从该文件中读出7个长度为5的数组,分别存到aa[5]、bb[5]、cc[5]、dd[5]、ee[5]、gg[5]、hh[5]中。最后将它们的值全部输出到屏幕上。 注意,所有变量均不会超过其存储范围。 内容提示:在本题对文件的操作内容中,会用到C语言文件操作函数,其打开文件的方式,如下: 1.FILE *fp=fopen("file.dat","rb");//"rb"为以只读方式打开二进制文件。 2.fread的样例代码: #include<stdio.h> int main() { int c,cc[5]={0}; FILE *fp=fopen("file.dat","rb"); fread(&c,sizeof(int),1,fp); //从fp指向的文件中读出一个整型变量 fread(cc,sizeof(int),5,fp); //从fp指向的文件中读出一个长度为5的整型数组。 fclose(fp); return 0; }
&a, sizeof(char), 1, fp);
fwrite(bb, sizeof(short), 5, fp);
fwrite(cc, sizeof(int), 5, fp);
fwrite(dd, sizeof(long), 5, fp);
fwrite(ee, sizeof(long long), 5, fp);
fwrite(gg, sizeof(float), 5, fp);
fwrite(hh, sizeof(double), 5, fp);
这段代码使用了fwrite函数,将变量中的数据以二进制形式写入到名为dict.dic的文件中。写入时按照变量类型的长度、个数依次写入,注意字符型写入1个字节,短整型写入2个字节,整型写入4个字节,长整型写入8个字节,拓展长整型写入8个字节,单精度浮点型写入4个字节,双精度浮点型写入8个字节。因此,dict.dic文件中存储了按照顺序包含了所有变量的二进制数据。
matlab中fwrite的用法
在MATLAB中,fwrite函数用于将数据以二进制形式写入文件。它的用法如下:
fwrite(fileID, A, precision, skip, machinefmt)
其中,各个参数的含义如下:
- fileID:表示文件标识符,即通过fopen函数打开的文件的标识符。你可以使用fid = fopen('filename', 'w')来打开一个文件,并将其赋值给fileID变量。
- A:表示要写入文件的数据。可以是向量、矩阵或多维数组。
- precision:表示写入文件时的精度。它可以是以下之一:
- 'uint8':无符号8位整数
- 'int8':有符号8位整数
- 'uint16':无符号16位整数
- 'int16':有符号16位整数
- 'uint32':无符号32位整数
- 'int32':有符号32位整数
- 'single':单精度浮点数
- 'double':双精度浮点数
- skip(可选):表示跳过的元素数目,默认为0。你可以使用该参数来指定从数据的特定位置开始写入文件。
- machinefmt(可选):表示写入文件时使用的机器格式,默认为本地机器格式。你可以使用'native'、'ieee-le'(小端存储)或'ieee-be'(大端存储)来指定机器格式。
举个例子,如果你想将一个双精度矩阵A写入一个名为'output.bin'的文件中,可以使用以下代码:
fileID = fopen('output.bin', 'w');
fwrite(fileID, A, 'double');
fclose(fileID);
以上代码首先使用fopen函数创建一个文件标识符fileID,然后使用fwrite函数将矩阵A以双精度的形式写入文件中,最后使用fclose函数关闭文件。
请注意,fwrite函数会按列的方式填充数据,这与fread函数中的默认行填充方式不同。如果你想将数据按行填充,请先对数据进行转置,然后再使用fwrite函数。
希望这样的解答对你有帮助。如果你还有其他问题,请随时提问。
阅读全文