[英]Read binary file to integer range of -32767 to 32767
我需要编写一个程序,将二进制文件读入-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。
谢谢!
对输入数据使用4
字节表示,即替换
signed char shint[2000] = "";
和
long int shint[2000] = "";
和
if ((bytes = fread(&shint, 1, 2000, fp)) > 0 ) { //bytes more than 0
和
if ((bytes = fread(&shint, 4, 2000, fp)) > 0 ) { //bytes more than 0
和
printf ("%d\n", shint[i]);
和
printf ("%ld\n", shint[i]);
笔记:
根据您的变量名称( shint
,即short int
)以及-32768
到+32767
的范围,您的讲师似乎想要2
个字节的数字,而不是4
。
在这种情况下,在声明中使用short int
(或简称为short
)并将2
作为fread()
函数的第二个参数。
我没有你的数据来测试(我没有测试我的答案)但它应该是这样的:
首先signed char shint[2000] = "";
持有 2000 个有符号字符(它们确实是有符号的 8 位值,请看这里- 这是处理数据类型大小时非常方便的资源),因此您需要一些值来保存有符号的 32 位(4 字节)值,这取决于您的机器架构,假设它是 32 位整数( 不难找出),您可以将值保存在int shint[2000] = "";
接下来你需要注意的是函数fread
这里是一些友好的文档,这个函数的第二个参数(在你的代码中是 1)应该是字节数,代表你想要读取的数据中的单个值,所以在你的情况下应该是 4(字节)。 其他参数应该没问题。
编辑:为了确保您正在阅读 4 个字节,您确实可以使用 MarianD 给出的答案并存储long
值。
据我了解,您希望轻松访问字符和带符号的 16 位整数。
#define SIZE 2000
union
{
char shint_c[SIZE * 2];
short shint[SIZE];
}su;
然后在你的 if
fread(&su, 2, SIZE, fp)
并在循环中打印短裤
printf ("%hd\n", su.shint[i]);
或 8 位整数
printf ("%hhd\n", su.shint_c[i]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.