#include <stdio.h>
#include <stdlib.h>
int main( )
{
//要写入文件的数字
double num1 = 76.54321;
int num2 = -1234567;
FILE* fpw = NULL;
if ((fpw = fopen("test.dat", "wb")) == NULL)
{
fprintf(stderr, "打开输出文件失败.\n");
return 0;
}
fwrite(&num1, 8, 1, fpw);//写入double(8字节)
fwrite(&num2, 4, 1, fpw);
fclose(fpw);
//从文件读取二进制
FILE* fpin = NULL;
if ((fpin = fopen("test.dat", "rb")) == NULL)
{
fprintf(stderr, "打开输入文件失败.\n");
return 0;
}
double fVal;
fread(&fVal, 8, 1, fpin);
printf("第一个值为(double):%lf\n", fVal);
//fseek(fpin, 8, 0);//从文件头偏移8字节(若不读取double值,可使用指针偏移读取后面的值)
unsigned char* buf = (unsigned char *) malloc(4);
fread(buf, 4, 1, fpin);
//转换为int类型的值
int iValue = buf[3]*256*256*256 + buf[2]*256*256 + buf[1]*256 + buf[0];
printf("第二个值为(int):%d\n", iValue);
fclose(fpin);
return 0;
}
输出结果为:
注:1、读取第二个值(int)时,采用了一个字节一个字节读取,然后组合成int值,至于为什么是buf[3]*256*256*256+...,而不是buf[0]*256*256*256,是因为inter CPU采用小端字节序模式。
2、申请缓存时(unsigned char* buf = (unsigned char *) malloc(4);),一定要为无符号型。