2016-03-24 17 views
1

Ich bekomme Werte in einem Format wie diesem 00-C6 (Hex). Es beschwert sich, wenn ich versuche, es in Double (Format-Ausnahme) zu konvertieren. Was ist zu tun?Wie konvertiert man Hex im Format 00-00 zum Doppel?

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

Was ist der Datentyp "A_1 [i] .CurrentValue"? eine 'Schnur'? Außerdem kann "Hex" eine "Ganzzahl" oder eine "Gleitpunkt" -Darstellung sein. Ist in Ihrem Fall die "Hex" für "Integer" oder "Floating-Point"? – Ian

+0

@Ian Ich weiß, dass der Datentyp eine Zeichenfolge ist. Ich bin nicht sicher über die Darstellung obwohl ... – Mocke

+0

Für mich sieht es * wie kleine Int-Darstellung aus. Denn für 'double' oder' float' hättest du normalerweise '4-byte hex' – Ian

Antwort

1

an diesem Stück Code Werfen Sie einen Blick:

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

die Hex00-C6string stellt Integer Wert Unter der Annahme, (denn wenn es floating-point Wert wie float oder double darstellt, muss es von 4-byte oder 8-byte besteht), dann ist eine Möglichkeit, die Hex string zu teilen:

string hexString = "00-C6"; 
string[] hexes = hexString.Split('-'); 

Dann bearbeiten Sie jedes Element in der hexes wie folgt aus:

int hex0 = Convert.ToInt32(hexes[0], 16); 
int hex1 = Convert.ToInt32(hexes[1], 16); 

Wenn das hex Little-Endian, dann wäre Ihr double Wert sein:

double d = hex0 << 8 + hex1; 

Und wenn es große endtion, Ihr double wird sein:

double d = hex1 << 8 + hex0; 

Der Schlüssel hier ist zu wissen, dass y Sie können die hexadezimale Zeichenfolgendarstellung in Int konvertieren, indem Sie Convert.ToInt32 mit dem zweiten Argument als 16 verwenden.

Sie können alle oben genannten Schritte in einem Liner kombinieren, wenn Ihnen danach ist. Hier zerlege ich sie absichtlich, um Klarheit zu schaffen.

Verwandte Themen