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

时间:2014-03-31 11:01:34

标签: c++ arrays windows split

我正在寻找一种方法,使用标准的Win32和C / C ++函数将数组拆分为多个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();

现在我想像这样拆分inputData。

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用于它们的尺寸。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

实际的块大小不重要。按照@ 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中的每一个都将检查索引是否有效。