C/C++中如何将文件读取为二进制数据到数组中,再从数组中读取二进制流还原为文件,主要是后一步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++中如何将文件读取为二进制数据到数组中,再从数组中读取二进制流还原为文件,主要是后一步相关的知识,希望对你有一定的参考价值。

文件可以为word,图像,文本,文件读取二进制数据到数组中这个我已经做通了,现在不知道怎么还原为源文件,求解答 (源文件一定是原来的格式,word转换后还原的还是word,以此类推)

任何文件都是由两部分组成的,文件=数据头+数据。
你存入数组的是完整的文件,包含了数据头和数据。那么你需要根据文件的定义来还原文件。比如说图像文件,拿BMP图像文件举例说明。在BMP数据头中,有许多图像定义块,这些不用管。然后看到颜色索引块(RGB小于16位特有),颜色索引块之后才是数据部分。你需要提取一个像素的信息(1-4字节不等),根据颜色索引确定该像素的颜色值。利用c语言中的画点函数,画上该点的颜色值。最后保存该文件,格式为BMP。操作系统会自动帮你补全数据头。
我举得例子是bmp图像的,其他的格式我不了解。如果你是要转换成其他格式。你就去网上搜一搜某某格式的数据包格式。
PS.全部都是纯手码字,望采纳!
参考技术A 你读取了二进制数据也没用,又不能操作
写入函数具体如下
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);追问

我不用操作,我想知道怎么还原成源文件

c语言文件读写,如何正确的存取多位数(int)

最近在写一个验证的小程序,被多位数的存取难到了,研究了好几天,一无所获。 我想将一个6位的整型数据(如:123456)写入到一个新的文件中,我用fputc( )写入完成,可用fgetc( )调出来一看,都是错的,请教大侠,怎样才能正确的存储并读出6位数(当然,只要是多位数存取的就可以了),不甚感激。

参考技术A C语言将整形数据存储到文件中,可采用两种方法,1、二进制存取
2、字符方式存取。

因存储方式的不同,读取也要采用相应的方式进行操作,否则不能正确得到存储的数据。
二进制存取
二进制方式是将原数据的内存格式存储到文件中,在同类型的机器上可以正确的读取。但如果换成不同类型的机器则会出现数据解释错误,因此,具有不可移植性。
这种方式,采用的存取函数相应为:fwrite()和fread().
如:
int
num=12345;
FILE
*fp=fopen(
"datafile",
"wb"
);
fwrite(
&num,
sizeof(int),
1,
fp
);
//将num数据写入文件
....
FILE
*fp=fopen(
"datafile",
"rb"
);
fread(
&num,
sizeof(int),
1,
fp
);
//读文件数据到num中
字符方式存取
字符方式是将数据的可见内容,以字符形式存储到文件中,可以在任何机器上阅读并读取,方便不同系统间的数据传递。
这种方式,采用的存取函数相应为:fprintf()和fscanf().
如:
int
num=0;
FILE
*fp=fopen(
"datafile",
"w"
);
fprintf(fp,
"%d\n",
num
);
//将num数据写入文件
....
FILE
*fp=fopen(
"datafile",
"r"
);
fscanf(fp,"%d",
&num
);
//读文件数据到num中

以上是关于C/C++中如何将文件读取为二进制数据到数组中,再从数组中读取二进制流还原为文件,主要是后一步的主要内容,如果未能解决你的问题,请参考以下文章

Linux C/C++文本文件操作

怎样用C语言读取txt文件中的二进制数据并转为一维数组

用c#wpf 怎么上传图片到数 据库 并且 读取出来 数据库:SQL server2008 vs2013

C语言怎么读取二进制文件中的数据放到一个300×300的二维数组里面

c语言文件读写,如何正确的存取多位数(int)

如何在c中读取二进制文件? (视频、图像或文本)