2017-03-06 28 views
2

我想端口旧的C程序VB.NETVB.NET单不等于Ç浮动

在旧的程序,我们有:

int bits; 
float value; 

bits = -1036020416 
value = *(float *)&bits; 

一种位值在读从一个文件,它的值是-1036020416(或0xC23F9540十六进制)

结果是值= -47.895752

(这里是从本地窗口复制/粘贴)

位0xc23f9540诠释

值-47.895752浮动

现在,从一切我可以找到我告诉浮球在VB.NET是一个在互联网上。因此,与下面的VB.NET代码:

Dim bits as integer 
Dim Value as single 

bits = -1036020416 
Value = Csng(bits) 

我得到如下结果:

值-1.03602042E + 9单

这究竟是为什么?我错过了什么?

+0

因为*(float *)&bits;不是-1036020416 – Steve

回答

4

使用BitConverter类两次:

  • 首先,转换-1036020416到字节序列
  • 其次,将得到的序列转换为Single(也称为float

这将产生值-47.89575demo):

Dim bytes = BitConverter.GetBytes(-1036020416) 
Dim res = BitConverter.ToSingle(bytes, 0) 
Console.WriteLine(res) 
+1

OMG!非常感谢!!! 我正在使用bitconverter.ToInt32,当我从文件中读取。我能够直接用bitconverter读取它。单独 –