2016-07-27 63 views
0

我试图读取一个二进制文件的内容作为一组n个字节,并将它们放在一个字符缓冲区中,并对缓冲区执行一些操作。对于下一次迭代,我必须从文件中读取下n个字节,并将其放入缓冲区,直到文件结束。我可以使用getc(fp)和普通文本文件做同样的事情。但是对于二进制文件,在读取文件的全部内容之前,getc()会遇到EOF。我如何用C中的二进制文件实现它?C中的二进制文件读取操作?

+1

你想知道C或C++吗?请删除不适当的标签。 –

+0

在C中,你可以看看fread()函数 –

+0

试用fread/fwrite C.在C++中有ifstream,第二个参数是ios :: binary,据我所知。 – slavanap

回答

0

你可以阅读使用的fread:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 

看到fread

3

两件事情要考虑:

首先,为了与fopen阅读打开二进制文件时,使用模式"rb"。这会以二进制模式打开文件,因此不会对某些字符进行特殊处理。请注意,在Linux上这并不重要,但在Windows上它确实如此。

其次,请注意fgetc会将一个字符转换为int。这使您可以检查EOF。如果结果不是EOF,它将是一个值从0到255的字符(假设当然是CHAR_BIT是8)。

+0

在C中,保证char在0-255的范围内,即是无符号的? – EFenix

+1

@AntonioGarrido是的。从手册页:*'fgetc()'从流中读取下一个字符,并将其作为'unsigned char'返回到文件或错误末尾的'int'或'EOF' * – dbush

+2

它应该说“转换“,而不是”施放“。 –

1

在二进制文件中,从文件中读取的过程通常由函数fread进行。此外,如果您要将过程迭代到文件末尾。您可以使用while

while(!feof(fp)) // still not read to the end of file yet 
if (fread(buffer, sizeof(...),1,fp)==1) //put single variable to the array[] 
.... 

`