与在 16 位 Microsoft C/C++ 编译器 long double 存储为 80 位 (10 个字节) 的数据类型。 在 Windows NT 下为了与其他非 Intel 的浮点实现,兼容 80 位长双格式是别名为 64 位 (8 字节) 双格式。
这意味着 32 位程序可能不是可以读取的后数据文件写入由 16 位程序,因为长双格式不兼容。
在 Intel 平台上唯一的解决方法是让浮点处理器句柄从 80 位到 64 位精度。 以后,数据到在 Win 32 下使用 64 位 Double 类型存储。
下面的代码示例说明了您可以使用浮点指令在内联程序集中将从 10 字节 Double 类型的数据文件转换为一个 8 字节双。
示例代码
<script type="text/javascript"></script>
/* Compile options needed: none
*/
#include <stdio.h>
void main(void)
{
FILE *inFile;
char buffer[10];
long double Newdbl;
inFile = fopen("data","rb");
fread(buffer, 10, 1, inFile); // reads in 10-byte long double
fclose(inFile);
// This moves the contents of the buffer into the floating point
// register, which then then takes care of the automatic convertion
// back to a 8-byte long double
_asm {
fld TBYTE PTR buffer;
fstp Newdbl;
}
}