从 C 文件中打印短裤

Printing shorts from a file in C

大家好,我正在学习 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 我得到像“192153000655350-20330470760655350-16777216-655360-655360000”这样的值老实说它对我来说看起来像随机的。

您使用 fread(buffer, 1, 1600, myfile); 阅读 short

这是错误的,因为 short 不一定是 1 个字节。请改用 sizeof(short) 并将数组声明为 short 数组。

您显示的代码示例甚至没有使用 short 关键字。 int 和 short 不是(必然)相同大小的类型。

无论如何,使用 fread() 读取 1600 个整数的数组通常需要类似于

fread(buffer, sizeof(int), 1600, myfile);

检查 fread() 的 return 值也是一个好主意。如果 sizeof(int) 为 4,并且文件总共包含 400 个字节,则 fread() 可能 return 100,表明它只成功读取了 100 个 int。毕竟,不可能在单个 fread() 语句中从仅包含 400 字节的文件中读取 6400 字节 (4*1600 = 6400)。