VB.NET Single不等于C float

时间:2017-03-06 17:01:10

标签: c++ vb.net casting

我正在尝试将旧的C程序移植到VB.NET

在旧程序中我们有:

int bits;
float value; 

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

从文件中读取位值,其值为-1036020416(或十六进制为0xC23F9540)

结果是值= -47.895752

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

位0xc23f9540 int

值-47.895752浮动

现在,从一切我可以在网上找到我被告知VB.NET中的浮点数就是单一的。所以使用以下VB.NET代码:

Dim bits as integer
Dim Value as single

bits = -1036020416
Value = Csng(bits)

我得到以下结果:

值-1.03602042E + 9单

为什么会这样?我错过了什么?

1 个答案:

答案 0 :(得分:4)

两次使用BitConverter课程:

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

这会产生值-47.89575demo):

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