统计二进制文件中 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);
我正在编写一个程序,我应该在其中跟踪二进制文件中有多少个 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);