我有一个二进制文件,想要从中读取一个双精度浮点数。
以十六进制表示,文件中有这8个字节(然后还有更多):
40 28 25 c8 9b 77 27 c9 40 28 98 8a 8b 80 2b d5 40 ...
这应该对应着大约为10的双精度浮点数(根据该条目的含义)。
我已经使用过
#include<stdio.h>
#include<assert.h>
int main(int argc, char ** argv) {
FILE * f = fopen(argv[1], "rb");
assert(f != NULL);
double a;
fread(&a, sizeof(a), 1, f);
printf("value: %f\n", a);
}
然而,它输出的值是:-261668255698743527401808385063734961309220864.000000
很明显,这些字节没有被正确地转换为双精度浮点数。到底发生了什么事情呢? 使用ftell,我确认了确实读取了8个字节。
12.0738
,第二个是12.2979
等等。因此,在LE平台上阅读时,请反转字节。我真诚地希望如果您这样做,所有平台都会以BE方式写入数据。 - WhozCraig