将Hex转换为Double

你如何为double设置特定位?

对于int我会做这样的事情:

public static int Value { get { return 0xfff8; } } 

双人怎么办?

 public static double Value { get { return 0xfff8; } } 

我有点担心我可能会从0xfff8的int表示到双浮点表示的隐式转换。 但是,我真的想要0xfff8位模式, 无论类型如何

查看BitConverter类或unsafe

不安全的例子(未经测试):

 public unsafe double FromLong(long x) { return *((double*)&x); } 

BitConverter示例:

 double d = BitConverter.Int64BitsToDouble(0xdeadbeef); 

http://msdn2.microsoft.com/en-us/library/system.bitconverter.int64bitstodouble

 byte bTemp = Convert.ToByte(hexValueInString, 16); double doubleTemp = Convert.ToDouble(bTemp); 

我正在使用.NET 4.0

假设您有以下字符串0x4007B425F202107B ,它代表双值。

要将其转换为double( IEEE754双精度64位 ),您需要使用以下代码:

 var hex = "0x4007B425F202107B"; var int64Val = Convert.ToInt64(hex, 16); var doubleVal = BitConverter.Int64BitsToDouble(int64Val); 

在线转换器从hex到双 。

我只是研究了将Double Value的Hex字符串转换回Double Value的主题。 我发现了一些有用的网站。 本网站显示了如何计算双值: https ://gregstoll.dyndns.org/~gregstoll/floattohex/这显示了如何计算小数点分形(二进制例子) https://www.geeksforgeeks.org/convert-binary C2-馏分小数/

我的示例输入值是40C688C000000000,结果是11537.5重要的是前三个hex值,因为它们是用于Double Value的指数。 在此之后,hex值的数量并不重要。

这是我从这个信息创建的简单代码:

 public static double DoubleFromHex(string hex) { int exponent; double result; string doubleexponenthex = hex.Substring(0, 3); string doublemantissahex = hex.Substring(3); double mantissavalue = 1; //yes this is how it works for (int i = 0; i < doublemantissahex.Length; i++) { int hexsignvalue = Convert.ToInt32(doublemantissahex.Substring(i, 1),16); //Convert ,16 Converts from Hex mantissavalue += hexsignvalue * (1 / Math.Pow(16, i+1)); } exponent = Convert.ToInt32(doubleexponenthex, 16); exponent = exponent - 1023; //just how it works result = Math.Pow(2, exponent) * mantissavalue; return result; }