【发布时间】:2017-10-08 14:18:33
【问题描述】:
我需要编写一个程序来将二进制文件读取到-32767到32767的范围内。到目前为止,下面的脚本将二进制文件读取到-128到127的范围内。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
signed char shint[2000] = "";
int i = 0;
size_t bytes = 0;
if ((fp = fopen("raw_data.ht3", "rb")) == NULL) {
printf ("could not open file\n");
return 0;
}
if ((bytes = fread(&shint, 1, 2000, fp)) > 0 ) { //bytes more than 0
for (i = 0; i < bytes; i++) {
printf ("%d\n", shint[i]);
}
}
fclose(fp);
return 0;
}
关于二进制文件的更多信息,我的讲师说二进制文件应该被读入 4 字节数据(我不确定我的措辞是否正确)。数据非常大,所以我停止读取数据,直到 2000 个数据。虽然将来我需要阅读所有这些。
这就是我想在一天结束时绘制的方式。获得所需数据后,我将调用我们的 matlab 或 scilab。
谢谢!
【问题讨论】:
-
您可能希望一次读取 2 或 4 个字节。 (你的问题标题建议两个字节,你的讲师说四个)。您可能可以使用
fread。 (字节交换理论上是一个问题,但对于本练习,您可能可以忽略它。) -
如何一次读取 2 或 4 个字节?
-
您的问题说您想要一个短 [] 数组。你的老师说你想要一个 int[] 数组。
-
@HansPassant 我认为我需要坚持每次阅读 4 个字节。
-
为避免编译器之间的类型大小差异,如果规范是文件中的整数每个为 4 个字节,则包含
<stdint.h>并使用int32_t或@987654326 是最安全的@,取决于整数应该被解释为有符号还是无符号。