2016-03-24 90 views
1

我正在像这样的00-C6(十六进制)格式获取值。它试图将它转换为double(格式化执行)时抱怨。该怎么办?如何将00-00格式的hex转换为double?

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++; 
      } 
     } 
    } 
+2

什么是'A_1 [i] .CurrentValue'数据类型? '串'?而且,'Hex'可以是'Integer'或'Floating-Point'表示。在你的情况下,代表'Integer'或'Floating-Point'的'Hex'是什么? – Ian

+0

@我知道数据类型是一个字符串。我不确定这个表示,尽管... – Mocke

+0

对我来说它看起来像小int表示。因为'double'或'float',你通常会有'4字节十六进制' – Ian

回答

1

看看这段代码:

 string hexnumber = "00-c6"; 
     double doubleValue = (double)Convert.ToInt32(hexnumber.Replace("-", ""), 16); 
2

假设Hex00-C6string表示Integer值(因为如果它代表floating-point值等floatdouble,它必须由4-byte8-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; 

而如果是大endtion,您的double将是:

double d = hex1 << 8 + hex0; 

这里的关键是要知道y ou可以使用Convert.ToInt32将第二个参数作为16将十六进制字符串表示形式转换为Int

如果您愿意,您可以将上述所有步骤合并到一个班轮中。为了演示清晰起见,我故意将其分解。