[救命]求四个整数转化成双精度浮点数的方法

OROCHIORI691 2010-08-29 03:01:00
两个整数转化成一个单精度浮点数的方法已找到(测试通过)
如下:

//两整数转化成浮点数
static float Int2Float(int a, int b)
{
int c = (a << 16) + (b & 0x0000ffff);//0xffff
byte[] bs = BitConverter.GetBytes(c);
float f = BitConverter.ToSingle(bs, 0);
return f;
}

求高手帮忙写出四整数转化成双精度浮点数的方法。

在现场找到了个例子,可以用来验证是否正确。

组1:
16789
69849
63513
18652
转化成的浮点数是—》92166782.024692

希望高手帮助,感谢万分~~~~~~~~~!!!!
...全文
752 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
OROCHIORI1 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mngzilin 的回复:]
但是结果不对,可能和double的内存分布的特殊性有关
[/Quote]
经反复测试,大的数字也是正确的,没问题的。
用虚拟的模拟下 数字应该是
16789
63847
63513
18652

我昨天第二个数字记错了..
OROCHIORI1 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mngzilin 的回复:]
但是结果不对,可能和double的内存分布的特殊性有关
[/Quote]
至于为什么结果不对,暂时说不清..但是小点的数测试是正确的
OROCHIORI1 2010-08-29
  • 打赏
  • 举报
回复
多谢海风,答案正确。
只是不明白为什么会出现如此大的数字。6万多啊,正常一个寄存器只能容2万多,我研究研究。
非常感谢!!!!
OROCHIORI691 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 computerfox 的回复:]
转换的规则是?
OROCHIORI691,好像是新的马甲,提过好多问题了,我记得都回到好几次了。不知道有没有记错?
阿捷
[/Quote]
一个整数是2字节,
双精度浮点数是8字节,也就是4个整数可以表示,这是我现在的理解,具体怎样去处理得到和现场数据一致,这是难点
OROCHIORI691 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 computerfox 的回复:]
转换的规则是?
OROCHIORI691,好像是新的马甲,提过好多问题了,我记得都回到好几次了。不知道有没有记错?
阿捷
[/Quote]
规则没有,只能研究,这个问题之前我没想到,业主那边压制了,实在无奈了
OROCHIORI691 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 computerfox 的回复:]
转换的规则是?
OROCHIORI691,好像是新的马甲,提过好多问题了,我记得都回到好几次了。不知道有没有记错?
阿捷
[/Quote]
没记错 呵呵 ,是啊 你回答我好多问题了。
现在跑现场多了,需要快速解决问题,很着急
捷哥1999 2010-08-29
  • 打赏
  • 举报
回复
转换的规则是?
OROCHIORI691,好像是新的马甲,提过好多问题了,我记得都回到好几次了。不知道有没有记错?
OROCHIORI691 2010-08-29
  • 打赏
  • 举报
回复
下午急用..很急..希望高手帮助
OROCHIORI691 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mngzilin 的回复:]
C# code
double getd(int a, int b, int c, int d)
{


int c1 = (a << 16) + (b & 0x0000ffff);//0xffff
int c2 = (c << 16) + (d & 0x0000ffff);//0xffff
byte[] bs1 = BitConverte……
[/Quote]
我先试试..
谢谢!!
mngzilin 2010-08-29
  • 打赏
  • 举报
回复
但是结果不对,可能和double的内存分布的特殊性有关
mngzilin 2010-08-29
  • 打赏
  • 举报
回复
double getd(int a, int b, int c, int d)
{


int c1 = (a << 16) + (b & 0x0000ffff);//0xffff
int c2 = (c << 16) + (d & 0x0000ffff);//0xffff
byte[] bs1 = BitConverter.GetBytes(c1);
byte[] bs2 = BitConverter.GetBytes(c2);

byte[] bs = new byte[bs1.Length + bs2.Length];
bs2.CopyTo(bs, 0);
bs1.CopyTo(bs, bs2.Length);

double f = BitConverter.ToDouble(bs, 0);

return f;
}


liyoubaidu 2010-08-29
  • 打赏
  • 举报
回复
什么意思啊?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧