如何将 10 字节 Long 类型的值的 Double 转换为 8 字节 Double

与在 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;
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值