在 C/C++ 中将数组拆分为块

Split array into chunks in C/C++

本文关键字:数组 拆分 C++      更新时间:2023-10-16

我正在寻找一种在 C/C++ 中使用标准 Win32 和 C/C++ 函数将数组拆分为多个数组的方法。

下面是一个示例,我如何将文件读入数组。

using namespace std;
LPSTR File_To_Read = "FILE.exe"; 
DWORD File_To_Read_Size = NULL;
DWORD inputSize = NULL;
PBYTE inputData = NULL;
ifstream input(File_To_Read, ifstream::binary | ifstream::ate);
File_To_Read_Size = static_cast<DWORD>(input.tellg());
input.seekg(input.beg);
inputData = new BYTE[File_To_Read_Size];
input.read(reinterpret_cast<char*>(inputData), File_To_Read_Size);
input.close();

现在我想像这样拆分输入数据。

DWORD inputSize_part1;
DWORD inputSize_part2;
DWORD inputSize_part3;
PBYTE inputData_part1;
PBYTE inputData_part2;
PBYTE inputData_part3;

所以在后面我也可以把它们重新组合在一起。

我应该怎么做?我会展示一个我尝试过的示例代码,但我的代码对你们专家来说没有多大意义。

编辑:@IKH 区块大小应大致相同。因此,如果inputData是33kb,那么inputData_part1(和inputSize_part1)应该是11kb,inputData_part2(和inputSize_part2)应该是11kb,依此类推。因此,最终将有3x 11kb数组和DWORDS的大小。

DWORD inputSize_part1 = inputSize / 3;
DWORD inputSize_part2 = inputSize / 3;
DWORD inputSize_part3 = inputSize - inputSize_part1 - inputSize_part2;
PBYTE inputData_part1 = inputData;
PBYTE inputData_part2 = inputData + inputSize_part1;
PBYTE inputData_part3 = inputData + inputSize_part1 + inputSize_part2;
现在,三个块

有三个指针和三个大小:前两个块是第三个或略小的块,如果原始块不能均匀整除,第三个块可能会稍微大一点。 当您使用所有块时,您需要delete[] inputData

实际的

块大小应该无关紧要。跟进@pmg的评论,在行input.read(reinterpret_cast<char*>(inputData), File_To_Read_Size);之后,您有一个数组来存储数据。最短数组的大小将始终File_To_Read_Size / 3,因为这是您要将其拆分为的数组数。对于访问,所使用的索引将通过所选数组的索引略微增加,如下所示:

//assume array_index is the number of the array you are accessing (1,2, or 3)
//and position is the location you are trying to access in that array
BYTE result = inputData[position + (array_index - 1)];

使用它,您只需要知道File_To_Read_Size % 3是什么。如果File_To_Read_Size % 3 == 1,则第一个数组包含最后一个 BYTE。否则,如果File_To_Read_Size % 3 == 2,则第二个数组包含最后一个 BYTE。否则,所有数组的大小相同。因此,前两个if中的每一个都将检查索引是否有效。