【求助】32位二进制转单精度浮点数问题

OROCHIORI533 2010-02-01 02:25:18
感觉这个方法很不错 但是调试出来的结果都是6.4打头的 不知道为什么 变换二进制得到的结果也是6.4打头

private void button1_Click(object sender, EventArgs e)
{
byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes("00000111101010101010101101010101");
float a = BitConverter.ToSingle(b, 0);
textBox1.Text = a.ToString();
}


难道32位二进制转化成的浮点数全是6.4打头的?
...全文
865 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
godef 2012-08-08
  • 打赏
  • 举报
回复
我想看9楼的程序,谢谢。
OROCHIORI 2010-02-01
  • 打赏
  • 举报
回复
多谢空军 问题已解决!9楼的程序太好了!!再次感谢!!!!
多谢lzsh0622 帮忙!! 你改签名了 以前是永不言弃 帮我解答过许多问题!!呵呵
wuyi8808 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lzsh0622 的回复:]
请VMM解释一下,十六进制与浮点数的转换问题。大家的结果不一致,哪种方法正确?依据?

[/Quote]

请看9楼的程序。
lzsh0622 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 viena 的回复:]
脑残片出售,5毛一片,批发优惠~
[/Quote]

请VMM解释一下,十六进制与浮点数的转换问题。大家的结果不一致,哪种方法正确?依据?

我再贴上一段,下面是我根据MSDN整理的。

// 数据类型 浮点数与十六进制转化
public string FloatToHex(float floatValue)
{
uint uintValue = BitConverter.ToUInt32(BitConverter.GetBytes(floatValue), 0);
byte[] byteValue = BitConverter.GetBytes(uintValue);
Array.Reverse(byteValue);
return BitConverter.ToString(byteValue).Replace("-","");
}

public float HexToFloat(String hexString)
{
uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] floatVals = BitConverter.GetBytes(num);
return BitConverter.ToSingle(floatVals, 0);
}
wuyi8808 2010-02-01
  • 打赏
  • 举报
回复
using System;
using System.Text;

class Program
{
static void Main()
{
float ff = 52.368F;
byte[] bb = BitConverter.GetBytes(ff);
string s = ToString(bb);
Console.WriteLine(s);
Console.WriteLine(ToSingle(s));
}

static string ToString(byte[] bb)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bb)
{
sb.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
}
return sb.ToString();
}

static float ToSingle(string s)
{
byte[] b = new byte[4];
byte[] d = { 1, 2, 4, 8, 16, 32, 64, 128 };
for (int i = 0; i < 4; i++)
{
b[i] = 0;
for (int j = 0; j < 8; j++)
{
if (s[i*8 + (7-j)] == '1') b[i] += d[j];
}
}
return BitConverter.ToSingle(b, 0);
}
}
hyfzz123 2010-02-01
  • 打赏
  • 举报
回复
uppu
OROCHIORI533 2010-02-01
  • 打赏
  • 举报
回复
6.409691E-10和1.604966E-35相等?两种算法得出这两种结果
wuyi8808 2010-02-01
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
string s = "00000111101010101010101101010101";
byte[] b = new byte[4];
byte[] d = { 1, 2, 4, 8, 16, 32, 64, 128 };
for (int i = 0; i < 4; i++)
{
b[i] = 0;
for (int j = 0; j < 8; j++)
{
if (s[(3-i)*8 + (7-j)] == '1') b[i] += d[j];
}
}
float a = BitConverter.ToSingle(b, 0);
textBox1.Text = a.ToString();
}
OROCHIORI533 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 viena 的回复:]
脑残片出售,5毛一片,批发优惠~
[/Quote]
...
viena 2010-02-01
  • 打赏
  • 举报
回复
脑残片出售,5毛一片,批发优惠~
OROCHIORI533 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xray2005 的回复:]
什么6.4哦。

是你那个数字值是: 0.000000000640969056  仔细看看。
直接输出时:6.409691E-10 科学计数法
[/Quote]
原来是这样 科学计数法能转化为普通那种小数点格式么?
ck11926375 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xray2005 的回复:]
什么6.4哦。

是你那个数字值是: 0.000000000640969056  仔细看看。
直接输出时:6.409691E-10 科学计数法
[/Quote]

对的 那个是科学计数


float ff = 52.368F;
byte[] bb = BitConverter.GetBytes(ff);
float f = BitConverter.ToSingle(bb, 0);
this.textBox1.Text = f.ToString();

xray2005 2010-02-01
  • 打赏
  • 举报
回复
什么6.4哦。

是你那个数字值是: 0.000000000640969056 仔细看看。
直接输出时:6.409691E-10 科学计数法

110,538

社区成员

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

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

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