Windows で C のファイルに値を書き込むと、間違っているように見えるものが得られ、その結果は Cygwin で実行された同じプログラムとは異なります。
この場合、float をファイルに書き込んでいます。
#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
ファイルからフロートに読み取ると、明らかに正しい値が得られません。また、ファイルに書き込まれるバイト数が間違っているため、5 バイトではなく 4 バイトにする必要があります。
これは、Cygwin で実行したときに得られるものです。
1578 0abe
正解です。これをファイルから float に読み込むと、正しい値 (-0.1352237) が得られます。
ここで何か不足していますか?これらの機能の Windows 実装には欠陥がありますか? それとも、データを正しく書き込んでいないのでしょうか?