2016-03-24 89 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

如果您願意,您可以將上述所有步驟合併到一個班輪中。爲了演示清晰起見,我故意將其分解。