-
代码参考
string IEEE754_32_single_to_decimal(string hexString)
{
string retrunVal = string.Empty;
if (hexString != "")
{
string mValue = HexString2BinString(hexString).Replace(" ", "");
// 符号位
//var symbolFlag = (mValue.Substring(0, 1) == "1") ? "负数" : "正数";
// 移位
var shiftFlag = mValue.Substring(1, 8);
//尾码
var tailCode = mValue.Substring(9);
//获取移位整数部分
var shiftIntegerPart = (Convert.ToInt32(shiftFlag, 2) - 127).ToString();
//转成十进制
int t = Convert.ToInt32(shiftFlag, 2);
t = t - 127;
shiftIntegerPart = t.ToString();
//二进制数值
//正数部分
var positivePart = (Convert.ToInt32("1" + tailCode, 2) >> (tailCode.Length - t)).ToString();
//小数点部分
string Float = tailCode;
if (t > 0)
{ Float = tailCode.Substring(t); }
else if (t < 0)
{
Float = "1" + tailCode;
for (int i = t + 1; i < 0; i++)
{
Float = "0" + Float;
}
}
Double tFloat = 0;
//C# 指数 函数 double a=2;double b=Math.Pow (a,3);
char[] aa = Float.ToCharArray();
for (int i = 0; i < aa.Length; i++)
{
if (aa[i] == '1')
{
tFloat = tFloat + Math.Pow(2, (-(i + 1)));
}
}
var fractionalPart = tFloat.ToString();
if (mValue.Substring(0, 1) == "0")
{ textBox10.Text = positivePart + "." + fractionalPart.Substring(2); }
else
{
textBox10.Text = "-" + positivePart + "." + fractionalPart.Substring(2);
}
}
return retrunVal;
}
/// <summary>
/// //16转2方法
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
static string HexString2BinString(string hexString)
{
try
{
string result = string.Empty;
foreach (char c in hexString)
{
int v = Convert.ToInt32(c.ToString(), 16);
int v2 = int.Parse(Convert.ToString(v, 2));
// 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格,
result += string.Format("{0:d4} ", v2);
}
return result;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}