c - 二进制文件中的文件位置不正确

标签 c

我正在将二进制文件读入一组外部文本文件中以进行后处理。我的代码如下:

for(k = 0; k < 76; k++) {
    for(j = 0; j < 76; j++) {
        curr = curr + j + k*(dim - 76);
        sprintf(Filename, "%s_%d.txt", file,count);
        fp = fopen(Filename, "w");
        for(i = 0; i < 256; i++) {
            fseek(qFile, (curr + i*dim*dim) * sizeof(float), SEEK_SET);
            fprintf(oFile, "%f\n", curr + i*dim*dim);
            fread(&temp, sizeof(float), 1 ,qFile);
            fprintf(fp, "%5.2f\n", temp);
        }
        fclose(fp);
        count++;
    }
}

但是,当我查看oFile指向的文件时,每组256个值的起始位置不是以1间隔,而是如下:

67024216
67024216
67024216
67024220
67024224
67024228
67024232
67024240
67024248
67024256
67024264
67024276
67024288
67024300
67024312
.
.
.

我不明白为什么各个元素的间距是4,我知道 float 的大小是4字节,但是打印到文件的值不是字节数,而是字节数的倍数字节。

最佳答案

Single-precision floating-point numbers不像整数那样工作。它们实际上具有较低的精度,因为八位用于符号和指数。这样您就剩下 24 位。

并且您的所有数字恰好都适合 24 位。或者,更确切地说,如果您去掉低两位,它们就会,而低两位恰好总是零(即增加 4 的倍数)。

我不知道它是否能解决您的所有问题,因为我显然不知道该项目的细节。但是,如果您将 float 定义更改为 double,它至少应该可以帮助您解决这个问题。

关于c - 二进制文件中的文件位置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718749/

相关文章:

c - 算法与设计模式有何不同?

c - 无论键入的数字如何,变量 INT 类型都接收 0

c++ - 与枚举的隐式转换

c - Winsock2 在 fd 0 (stdin) 上的 select() 失败

c - 使用(或不使用)stdint 的原因

c - 通过冒泡排序机制得到两个簇

c - 使用带有指针的嵌套结构

c - 使用 setvbuf() 禁用标准输入和标准输出的缓冲

c - 为什么在更改源文件时 make 不重建?

python - Linux 阻塞信号到 Python init