fread一个图片文件 返回值怎么是5
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread一个图片文件 返回值怎么是5相关的知识,希望对你有一定的参考价值。
是首地址的第一个字节是5吧。fread回来的是一个buf,buf有长度的。你这显示的应该是第一个字节的值而已。你要对的话,比如如果是int,那么你就把4个字节给那个int就可以看到那个int的值了。,
如 int a;
memcpy(&a,buf,4);这样a的值就会是你返回buf的第一个int值了,当然你得知道这个buf代表的是什么东西。如果纯粹是内存块,那么你就看你想怎么用了追问
我是把jpg图片用fread读到一个char型的buffer中, char型的buffer是不能保存的 但是unsignedchar 和byte型也不行 老是返回不了 正确的长度,望指教 谢谢
追答你要把这个buf用来做什么呢?如果你读了一个jpg的文件到buf里面,那么你想获得长度可以这样。
fopen之后,立马
fseek(pfile,0L,SEEK_END);
long changdu = ftell(pfile);
rewind(pfile);//文件指针回到原来地方
chuangdu就是你要的buf长度了。
然后你可以继续做你原来要做的事情。
因为我读进buffer之后 还要通过这个buffer往外写的?不分配的话 写就不能写了啊
追答char *buffer = new char[changdu];
fread(buffer,1,changdu,pfile);
这不就可以了么.buffer的分配肯定需要多少,分配多少呀,你分配太多有什么用?
我也是这样分配的,buffer里面是有数据的 但是fread在返回时 不是changdu的真实大小,比如图片大小为100K我把bufffer分配的大小是8192B,但是fread的返回数据是159B ,而且buffer里面的数据是8k的大小, 如果返回值不对的话 无法完成图片的循环读写。
追答fread如何返回的,返回值你是不是取成了他的指针地址或是其他呢?
参考技术A fread返回读取的字节数。你的问题:要么是指定每次只读5字节
要么是到达文件尾。追问
我每次读的是8K的数据量 char型的buffer是保存不了图片的文件流的 但是又不知道用什么类型的buffer来保存。
追答就用char型的,怎么会保存不了!!!不管什么格式的文件都被当作2进制流!最好把你的代码贴出,别人才能分析怎么做。
c语言中fread函数怎么用
有一个二进制文件,我想把里面的一个八个字节的数读出来(其实就是1)然后我建立一个int a[];数组,然后调用fread(a,8,1,fp);fp是对应打开文件的指针,怎么就没读进去呢?我把数组改成double 后再读,就能读进去了,可是读的不是1,是一个接近0的小数,我就崩溃了,我的问题是,第二个参数,跟第一个参数有关系吗?八个字节的数到底怎么才能读出来?跪求高手解答!
c语言中fread函数语法为size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream )。buffer是指向要读取的数组中首个对象的指针,size是每个对象的大小(单位是字节),count是要读取的对象个数,stream是输入流。通过fread函数可进行数据读取,返回成功读取的对象个数。
扩展资料:
fread函数从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用size次fgetc),把buffer当作unsignedchar数组并顺序保存结果。流的文件位置指示器前进读取的字节数。
若出现错误,则流的文件位置指示器的位置不确定。若没有完整地读入最后一个元素,则其值不确定,可能小于count。若size或count为零,则fread返回零且不进行其他动作。fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。
参考技术Afread函数可从文件中读取二进制数据
语法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5)'
c =
65 66 67 68 69
fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:
用 法
int feof(FILE *stream);
参数
流 :FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:
fread--百度百科
1、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型:size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参数:
buffer 用于接收数据的内存地址
size 要读的每个数据项的字节数,单位是字节
count 要读数据项的个数,每个数据项size个字节.
stream 输入流的指针
返回值:
返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
2、例程:
#include<string.h>
int main(void)
FILE*stream;
char msg[]="this is a test";
char buf[20];
if((stream=fopen("DUMMY.FIL","w+"))==NULL)
fprintf(stderr,"Cannot open outputfile.\\n");
return 0;
fwrite(msg,1,strlen(msg)+1,stream);
fseek(stream,0,SEEK_SET);
fread(buf,strlen(msg)+1,1,stream);
printf("%s\\n",buf);
fclose(stream);
return0;
参考技术C 如果你想把这8个字节当成一个数来读的话可以这样(在VC环境下)
__int64 a;
fread(&a,sizeof(__int64),1,fp);
如果你想分别读出这8个字节的话,可以这样:
char a[8];
fread(a,sizeof(char),8,fp);
希望对你有帮助
__int64也可以用来表示一个整数,只不过它能表示的范围比int类型的要大,int类型占4个字节,而这个__int64占8个字节。如果你用的是gcc编译器(像DEV-C等),那应该是long long追问
首先非常感谢!我是想把8个字节当成一个数来读。__int64是什么类型的呢?我用
fread(&a,sizeof(__int64),1,fp);然后输出,想看看对不对,我就用cout<<a;然后提示出错。我用printf("%d",a);结果显示的0,还是不对呀。求进一步指导。我的QQ号是:460730390,急需帮助
fread(a,8,1,fp);
然后在对a的元素按需求处理。
如果声明成double,必须在写文件的时候写入的变量也是double,用double读出来才对。
写入字节,用double读出来肯定不对,double是浮点,不是整数,使用8个字节来存储,1个符号位,11位阶数,52位尾数。追问
不行啊,我要读的是数,不是字符
追答unsigned char 是字节数据,二进制数据,表示范围(00H-FFH),字符(00H-7FH)只是其中的一部分。
以上是关于fread一个图片文件 返回值怎么是5的主要内容,如果未能解决你的问题,请参考以下文章