统计二进制文件中 32 位数字的个数

Count number of 32-bit numbers in binary file

我正在编写一个程序,我应该在其中跟踪二进制文件中有多少个 32 位数字。

例如,当输入一个总共有 4x32 位的文件时: 0100100101001001001010010100101101001000100101001001001010010100010101000100100101001001000100010100101001000100100100100=000[0100]

它应该打印 4。

我用 getc 试过了,但没用。

我认为解决方案与 fread 有关,但我不确定如何在这个问题中使用它。

int main() {
    FILE *fp = fopen("/home/pavlos55/GitRepo/arm11_1415_testsuite/test_cases", "rb");
    uint32_t number;
    uint32_t lines = 0;

    while (fread(&number, 4, 1, fp)) {
        lines++;
    }
    printf("%i", lines);
    return 0;
}

可以fread条件。为什么这还不够?

感谢您的帮助。

一个更实用的解决方案是 fseek() 到文件末尾,然后使用 ftell() 获得结果位置。这将是 "the size of the file in bytes."

您将第 3 个和第 4 个参数切换为 fread():使用 uint32_t,您可以读取 4 个大小为 1 的元素,而不是 1 个大小为 4 的元素。理解这一点很重要of what fread() returns:实际读取的元素数量 - 这是您需要添加到 lines 的内容。这是一个工作版本:

#include <stdio.h>
#include <stdint.h>

int main() {
    FILE *fp = fopen("test.c", "rb");
    uint32_t number;
    uint32_t lines = 0;
    size_t bytes_read;

    while ((bytes_read = fread(&number, 1, 4, fp))) {
        lines += bytes_read;
    }

    printf("%i\n", lines);
    return 0;
}

UPDATE:要统计32位数字的个数,循环后将lines除以4即可:

lines /= 4;
printf("%i\n", lines);