C# 将十六进制转换为双进制
如何设置双精度计数器的特定位 对于int,我会这样做:C# 将十六进制转换为双进制,c#,C#,如何设置双精度计数器的特定位 对于int,我会这样做: public static int Value { get { return 0xfff8; } } 双人间我该怎么办 public static double Value { get { return 0xfff8; } } 我有点担心我可能会得到从0xfff8的int表示到双浮点表示的隐式转换。但是,无论类型如何,我都希望使用0xfff8位模式。查看位转换器类或go不安全 不安全示例(未测试): 位转换器示例: double d =
public static int Value { get { return 0xfff8; } }
双人间我该怎么办
public static double Value { get { return 0xfff8; } }
我有点担心我可能会得到从0xfff8的int表示到双浮点表示的隐式转换。但是,无论类型如何,我都希望使用0xfff8位模式。查看
位转换器
类或go不安全
不安全示例(未测试):
位转换器示例:
double d = BitConverter.Int64BitsToDouble(0xdeadbeef);
我使用的是.NET 4.0让我们假设您有以下字符串
0x4007B425F202107B
,它表示双精度值
要将其转换为double(),需要使用以下代码:
var hex = "0x4007B425F202107B";
var int64Val = Convert.ToInt64(hex, 16);
var doubleVal = BitConverter.Int64BitsToDouble(int64Val);
.我刚刚研究了将双精度值的十六进制字符串转换回双精度值的主题。 我发现了一些有用的网站。 本网站介绍如何计算双精度值: 这显示了小数点分形是如何计算的(二进制示例) 我的示例输入值是40C688C000000000,结果是11537.5 重要的是前3个十六进制值,因为它们是用于双精度值的指数。这之后的十六进制值的数量实际上并不重要 这是我根据这些信息创建的简单代码:
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;
}
public static double DoubleFromHex(字符串十六进制)
{
整数指数;
双重结果;
字符串doubleexponenthex=十六进制子字符串(0,3);
字符串double尾数=十六进制子字符串(3);
双尾数=1;//是的,它就是这样工作的
对于(int i=0;i
var hex = "0x4007B425F202107B";
var int64Val = Convert.ToInt64(hex, 16);
var doubleVal = BitConverter.Int64BitsToDouble(int64Val);
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;
}