Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件(C)读取数据块_C_File_Buffer - Fatal编程技术网

从文件(C)读取数据块

从文件(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

我的二进制文件包含以下格式的数据块:

0xAA。。。可变长度的字节。。。0XFF

有没有一种好方法可以直接将这些数据块读入缓冲区,而不是一次读取一个字节的文件?

您可以使用“fopen”打开文件“rb”代表读取二进制文件

 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,你可以读取大量的数据