2013-05-15 15 views
8

Ho: "0xE94C827CEB" in hex ma come stringa.Come convertire questa stringa esadecimale in una lunga?

Che è: 1.002.011,000043 millions (gg mm aaaa HH mm ss)

Purtroppo non so come fare la conversione se solo ce l'ho in formato stringa e non ho un Convert.ToLong ("0xE94C827CEB", 16) funzione perché sto utilizzando .NET Micro Framework (inoltre, non ho lo spazio dei nomi NumberStyles disponibile.)

Esiste una funzione là fuori che convertirà questo per me?

Grazie

+0

volle qualche istante per trovarlo http://msdn.microsoft.com/en-us/library/ee435453.aspx – Jodrell

risposta

11

Non so di qualsiasi funzione per farlo, ma credo che si può fare molto semplicemente dividendo la stringa esadecimale e passando attraverso ogni parte Convert.ToInt32():

int part1 = Convert.ToInt32("E9", 16) 
int part2 = Convert.ToInt32("4C827CEB", 16) //the last 4 bytes 
long result = part1 * 4294967296 + part2 //4294967296 being 2^32. Result = 1002011000043 
+0

Questo ha funzionato perfettamente. Grazie mille! –

3

Calci la vecchia scuola e tira il tuo. Questo non è esattamente scienza missilistica qui:

public ulong HexLiteral2Unsigned(string hex) 
{ 
    if (string.IsNullOrEmpty(hex)) throw new ArgumentException("hex") ; 

    int i = hex.Length > 1 && hex[0]=='0' && (hex[1]=='x'||hex[1]=='X') ? 2 : 0 ; 
    ulong value = 0 ; 

    while (i < hex.Length) 
    { 
     uint x = hex[i++] ; 

     if  (x >= '0' && x <= '9') x = x - '0' ; 
     else if (x >= 'A' && x <= 'F') x = (x - 'A') + 10 ; 
     else if (x >= 'a' && x <= 'f') x = (x - 'a') + 10 ; 
     else throw new ArgumentOutOfRangeException("hex") ; 

     value = 16*value + x ; 

    } 

    return value ; 
} 
+0

Anche molto bello, grazie –

12

Per quelli di voi che cercano la risposta utilizzando il framework .NET completo per pc.

long answer = Convert.ToInt64("E94C827CEB",16); 

vedi: MSDN Documentation

+1

grazie per la tua risposta lunga .... :) – printfmyname

Problemi correlati