zoukankan      html  css  js  c++  java
  • C一次将整个文件读入内存

    最近工作,有个需求需要将YUV的整个文件读入内存,然后处理这些YUV数据,一种比较有效的方法如下:

    #include <stdio.h>
    #include <stdlib.h>
     
    int main ()
    {
        FILE * pFile;
        long lSize;
        char * buffer;
        size_t result;
     
        /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */
        pFile = fopen ("test.txt", "rb" );
        if (pFile==NULL)
        {
            fputs ("File error",stderr);
            exit (1);
        }
     
        /* 获取文件大小 */
        fseek (pFile , 0 , SEEK_END);
        lSize = ftell (pFile);
        rewind (pFile);
     
        /* 分配内存存储整个文件 */
        buffer = (char*) malloc (sizeof(char)*lSize);
        if (buffer == NULL)
        {
            fputs ("Memory error",stderr);
            exit (2);
        }
     
        /* 将文件拷贝到buffer中 */
        result = fread (buffer,1,lSize,pFile);
        if (result != lSize)
        {
            fputs ("Reading error",stderr);
            exit (3);
        }
        /* 现在整个文件已经在buffer中,可由标准输出打印内容 */
        printf("%s", buffer);
     
        /* 结束演示,关闭文件并释放内存 */
        fclose (pFile);
        free (buffer);
        return 0;
    }
    

    在用户态可以很方便的测试这个例子,可以写一个简单的程序,读入YUV422格式含有多帧的文件,然后操作这块内存,获取单独的Y分量数据和C分量数据,也可以按帧操作此文件。

    ------------------------------- 问道,修仙 -------------------------------
  • 相关阅读:
    团队介绍与选题报告
    实验6:开源控制器实践——RYU
    二叉搜索树的2层结点统计 (25 分)
    2020团队程学设计天梯赛-总决赛
    口罩发放 (25 分)
    九宫格输入法
    检查密码
    暑期训练10-1010
    暑期训练09-1003
    数据结构之循环队列
  • 原文地址:https://www.cnblogs.com/elvalad/p/4052649.html
Copyright © 2011-2022 走看看