【问题标题】:Count number of 32-bit numbers in binary file计算二进制文件中 32 位数字的个数
【发布时间】:2015-08-31 10:09:39
【问题描述】:

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

例如,当输入一个总共有 4x32 位的文件时: 0100100101001001001010010100101101001000100101001001001010010100010101000100100101001001000100010100101001000100100100100000000000000000000

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

感谢您的帮助。

【问题讨论】:

  • 您是在计算字数还是字节数?如您所说,如果您计算字节数,答案应该是 16,而不是 4。
  • 上面的代码又有什么问题?
  • 而且,这一堆零和一实际上是您输入文件中的内容吗?我的意思是,这是您在打开文本编辑器时看到的内容吗?
  • @DoxyLover 我实际上在这个问题中犯了一个错误,我没有计算字节,我计算的是双字(32 位)。

标签: c count binary bits


【解决方案1】:

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

【讨论】:

    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2011-06-12
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多