我正在尝试将旧的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单
为什么会这样?我错过了什么?
答案 0 :(得分:4)
两次使用BitConverter
课程:
-1036020416
转换为字节序列Single
(也称为float
)这会产生值-47.89575
(demo):
Dim bytes = BitConverter.GetBytes(-1036020416)
Dim res = BitConverter.ToSingle(bytes, 0)
Console.WriteLine(res)