嘿伙计们我正在学习C并且我在网上搜索但无法找到任何帮助。我试图从文件中读取字节,将它们保存到缓冲区,然后将它们打印为短路。但到目前为止我的代码有一些问题,即使它看起来合乎逻辑。我很感激帮助:
//print shorts
// write bits into the buffer
int buffer[1600];
fread(buffer, 1, 1600, myfile);
//take them out as shorts from the buffer
int shrtcnt = 0; // short count
while (shrtcnt < 160){
int nxtshrtcnt = shrtcnt + 16;
printf("This is a short: ");
for (int a = shrtcnt; a < nxtshrtcnt; a++){
printf("%d", buffer[a]);
}
printf("\n");
shrtcnt += 16;
}
这打印出一些数字,但它们并没有接近我的预期。有任何想法吗? 我创建了一个文件并将值放在自己身上。我应该得到的值是1112131415161718我得到像&#34; 192153000655350-20330470760655350-16777216-655360-655360000&#34;说实话,它看起来像是随机的。
答案 0 :(得分:0)
您使用fread(buffer, 1, 1600, myfile);
来阅读short
。
这是错误的,因为short
不一定是1个字节。请改用sizeof(short)
并将数组声明为short
数组。
答案 1 :(得分:0)
您展示的代码示例甚至不使用short关键字。 int和short不是(必然)相同的大小类型。
无论如何,使用fread()来读取1600个int的数组通常需要像
一样fread(buffer, sizeof(int), 1600, myfile);
检查fread()的返回值也是个好主意。如果sizeof(int)为4,并且文件总共包含400个字节,则fread()可能返回100,表示它只能成功读取100个int。毕竟,从一个只包含400个字节的文件中,不可能在单个fread()语句中读取6400个字节(4 * 1600 = 6400)。