我的格式是00-C6(Hex)。当我尝试将其转换为double(格式化execption)时,它会抱怨。怎么办?
public void check()
{
double low;
double high;
percentageCalculator(4095, 5, out low, out high);
Dictionary[] A_1 = {Max_1, Min_1};
for (int i = 0; i < A_1.Length; i++)
{
if ((Convert.ToDouble(A_1[i].CurrentValue) <= low) || ((Convert.ToDouble(A_1[i].CurrentValue) >= high))
{
Fault++;
}
}
}
答案 0 :(得分:2)
假设Hex
00-C6
string
代表Integer
值(因为它代表floating-point
值float
或double
,它必须包含4-byte
或8-byte
),然后处理它的一种方法是拆分Hex string
:
string hexString = "00-C6";
string[] hexes = hexString.Split('-');
然后你像这样处理hexes
中的每个元素:
int hex0 = Convert.ToInt32(hexes[0], 16);
int hex1 = Convert.ToInt32(hexes[1], 16);
如果十六进制是小端,那么您的double
值将为:
double d = hex0 << 8 + hex1;
如果它是大结局,那么您的double
将是:
double d = hex1 << 8 + hex0;
这里的关键是要知道你可以使用Int
将十六进制字符串表示转换为Convert.ToInt32
,第二个参数为16
。
如果您愿意,可以将上述所有步骤合并到一个衬垫中。在这里,为了清晰起见,我故意将它们分解。
答案 1 :(得分:1)
看一下这段代码:
string hexnumber = "00-c6";
double doubleValue = (double)Convert.ToInt32(hexnumber.Replace("-", ""), 16);