从文件(C)读取数据块
我的二进制文件包含以下格式的数据块: 0xAA。。。可变长度的字节。。。0XFF 有没有一种好方法可以直接将这些数据块读入缓冲区,而不是一次读取一个字节的文件?您可以使用“fopen”打开文件“rb”代表读取二进制文件从文件(C)读取数据块,c,file,buffer,C,File,Buffer,我的二进制文件包含以下格式的数据块: 0xAA。。。可变长度的字节。。。0XFF 有没有一种好方法可以直接将这些数据块读入缓冲区,而不是一次读取一个字节的文件?您可以使用“fopen”打开文件“rb”代表读取二进制文件 FILE* fileptr; unsigned char* buffer; fileptr = fopen("file_name", "rb"); // r for read, b for binary fseek(fileptr, 0, S
FILE* fileptr;
unsigned char* buffer;
fileptr = fopen("file_name", "rb"); // r for read, b for binary
fseek(fileptr, 0, SEEK_END); // fseek will take fileptr to end of file (SEEK_END)
filelen = ftell(fileptr); //here we get filelen
printf("file len =%d\n", filelen);
rewind(fileptr);
buffer = (unsigned char*)malloc(filelen * sizeof(unsigned char));
fread(buffer, filelen, 1, fileptr);
fclose(fileptr);
最后,您将在缓冲区指针中获得所有二进制文件内容
使用后不要忘记释放缓冲区。请查看
fread
。循环缓冲区,因为您不知道消息长度。有没有一种好方法可以实现此循环缓冲区?您可能需要使用循环缓冲区读取两个数据块。我看不出块读取的相关性。可能不是2个块,但当您读取固定长度的数据块时,它可能包含完整的消息或不包含完整的消息。因此,缓冲区操作是这个程序唯一“困难”的部分。我不想在缓冲区中读取整个文件。我需要按顺序读取数据块。一次读取一个字节,一次读取多个字节??int fseek(文件*流,长偏移量,int whence);你可以在这里看到fseek函数的用法,基本上,你可以给出适当的偏移量,这取决于你将得到filelen,你可以读取大量的数据