我有一个二进制文件,其中存储了多个int32值块。每个块均以值999999999开头,例如
9999999991个5610299999999943580999999999等。
有人可以建议以最快的方式计算二进制文件中999999999的数量吗?我当然可以使用for循环进行迭代并计算这些值,但是我认为这不是最佳方法。我要执行此操作的原因是要预先分配2D数组。
谢谢
由于块定界符代码可以出现在整个文件的任何位置,因此您必须阅读并处理整个文件。假设该程序没有做任何荒唐的事情,则所涉及的I / O成本将主导整个程序的总成本。
我当然可以使用for循环进行迭代并计算这些值,但是我认为这不是最好的方法。
为什么不是最好的方法?当然,细节很重要,但是您必须将每个4字节块(解释为int32_t
的表示形式)与值999999999进行比较。这是一个固有的迭代过程,可以通过for
很好地表示出来。 ,while
或do
循环。我会这样写:
#define BUFFER_SIZE 1024
#define BLOCK_HEADER 999999999
FILE *input = fopen(the_file_name);
int32_t numbers[BUFFER_SIZE];
size_t num_blocks = 0;
size_t count;
for (count = fread(numbers, 4, BUFFER_SIZE, input);
count > 0;
count = fread(numbers, 4, BUFFER_SIZE, input)) {
for (size_t i = 0; i < count; i++) {
if (numbers[i] == BLOCK_HEADER) num_blocks++;
}
}