如何在C ++中将二进制数据划分为帧?

时间:2013-12-15 15:26:32

标签: c++ pointers binary

我需要读取包含几个字节的二进制文件,并将内容分成帧,每帧包含535个字节。文件中存在的帧数在运行时是未知的,因此我需要为它们动态分配内存。下面的代码是一个片段,你可以看到,我正在尝试创建一个指向字节数组(uint8_t)的指针,然后递增到下一帧,依此类推,在读取缓冲的循环中数据进入帧。如何在运行时分配内存,这是执行任务的最佳方式吗?如果有更优雅的解决方案,请告诉我。另外,我如何管理内存?

#include <cstdio>

using namespace std;

long getFileSize(FILE *file)
{
    long currentPosition, endPosition;
    currentPosition = ftell(file);
    fseek(file, 0, 2);
    endPosition = ftell(file);
    fseek(file, currentPosition, 0);
    return endPosition;
}

int main()
{
    const char *filePath = "C:\Payload\Untitled.bin";
    uint8_t *fileBuffer;
    FILE *file = NULL;
    if((file = fopen(filePath, "rb")) == NULL)
        cout << "Failure. Either the file does not exist or this application lacks sufficient permissions to access it." << endl;
    else
        cout << "Success. File has been loaded." << endl;
    long fileSize = getFileSize(file);
    fileBuffer = new uint8_t[fileSize];
    fread(fileBuffer, fileSize, 1, file);
    uint8_t (*frameBuffer)[535];
    for(int i = 0, j = 0; i < fileSize; i++)
    {
        frameBuffer[j][i] = fileBuffer[i];
        if((i % 534) == 0)
        {
            j++;
        }
    }

1 个答案:

答案 0 :(得分:2)

struct frame {
    unsigned char bytes[535];
};

std::vector<frame> frames;

现在你的循环可以简单地读取一个帧并将其推入frames。不需要明确的内存管理:std::vector为您做到这一点。