我需要读取包含几个字节的二进制文件,并将内容分成帧,每帧包含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++;
}
}
答案 0 :(得分:2)
struct frame {
unsigned char bytes[535];
};
std::vector<frame> frames;
现在你的循环可以简单地读取一个帧并将其推入frames
。不需要明确的内存管理:std::vector
为您做到这一点。