计算二进制文件中32位数的数量

时间:2015-06-15 19:13:09

标签: c count binary bits

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

例如,当输入总共4x32位的文件时:     01001001010010010010100101001011010010001001010010010010100101000101010001001001010010010001000101001010010001001001001000000000

它应该打印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可以处于这种状态。为什么这不够?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

更实用的解决方案是fseek()到文件末尾,然后使用ftell()获取结果位置。这将是“以字节为单位的文件大小。”

答案 1 :(得分:2)

您将第3和第4个参数切换为fread():使用uint32_t,您可以读取4个大小为1的元素,而不是1个大小为4的元素。这对于理解什么是很重要的fread()返回:读取的元素的实际数量 - 这是您需要添加到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;
}

更新:要计算32位数的数量,请在循环后将lines除以4:

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