如果我通过此代码将浮动文件存储在文件中
fwrite((void*)(&v), sizeof(v), 1, f); // v is a float.
使用此代码读取文件的程序多久会导致运行时错误,因为float是8个字节而不是4个?
float v;
fread((void*)(&v), sizeof(v), 1, f);
return v;
我是否可以始终读取4个字节并将其转换为8字节的浮点数?那会更便携吗?
强调不同的Windows平台64位与32位。
答案 0 :(得分:6)
我不会担心浮动的 size 而更担心它的字节顺序。我要说绝大多数C ++实现都使用IEEE 754,这意味着浮点数总是32位和64位。
您可能希望序列化值的文本表示,或者特别注意确保字节顺序正确。
答案 1 :(得分:2)
如果您可以合理地将数据存储为文本而不是原始二进制文件,那么总是更好。这避免了上述问题以及无数其他问题,例如:
如果需要,它还可以使其他程序使用数据。
当然,缺点是文本需要更多存储空间,所以如果你有大量数据,那么文本可能不是一个选项。
答案 2 :(得分:1)
float
的大小可能会发生变化,但double
不会。你确定为此目的使用double
是不是更好的主意? double
总是8个字节。
答案 3 :(得分:0)
浮动都非常通用,指的是IEEE单精度浮点数。
答案 4 :(得分:0)
在Windows平台上,sizeof(float)
始终为4个字节,无论它是32位还是64位进程/ OS。不知道标准,但在大多数平台上,float的大小是四个字节。