0

在 Windows 下将值写入 C 中的文件时,我得到的东西似乎是错误的,结果与在 Cygwin 中运行的同一程序不同。

在这种情况下,我将浮点数写入文件:

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>

int         main( void )
{
    int     fd;
    float   f;

    fd = open("file.a", O_RDWR | O_CREAT);
    f = (float)atof("-0.1352237");
    printf("%.7f\n", f);

    write(fd, (void *)&f, sizeof(float));
    close(fd);
    printf("sizeof(float): %d\n", sizeof(float));

    return (EXIT_SUCCESS);
}

我已经在 Windows 和 Cygwin 中编译并运行了这个文件(没有包含),但我没有得到相同的结果。由于我正在写一个浮点数,我希望输出文件有 4 个字节写入它

但是,在命令行中使用 cl.exe 编译时的输出似乎是错误的:

1578 0d0a be

如果我从文件中读取到浮点数,显然我没有得到正确的值。而且写入文件的字节数是错误的,应该只有4个字节,而不是5个。

这是我在 Cygwin 中运行时得到的:

1578 0abe 

这是对的。如果我从文件中读取它到浮点数,我会得到正确的值(-0.1352237)。

我在这里错过了什么吗?这些功能的windows实现是否有缺陷?或者也许我没有正确写入数据?

4

1 回答 1

2

您已以文本模式(默认)打开文件,因此0a( "\n") 被翻译为0d0a( "\r\n")。

您需要使用O_BINARY标志以二进制模式打开文件。

于 2012-06-09T19:05:44.617 回答