我正在制作一个程序,我应该跟踪二进制文件中有多少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
可以处于这种状态。为什么这不够?
感谢您的帮助。
答案 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);