2013-05-15 2 views
8

У меня: «0xE94C827CEB» в шестнадцатеричном виде, но как строка.Как преобразовать эту шестнадцатеричную строку в длинную?

Что: 1002011000043 (дд мм гггг HH мм сс)

К сожалению, я не знаю, как сделать конверсию, если только это в строчном формате, и я не имею Convert.ToLong («0xE94C827CEB», 16), потому что я использую .NET Micro Framework (также нет пространства имен NumberStyles).

Есть ли функция, которая преобразует это для меня?

Благодаря

+0

потребовалось несколько минут, чтобы найти его http://msdn.microsoft.com/en-us/library/ee435453.aspx – Jodrell

ответ

11

Я не знаю, какой-либо функции, чтобы сделать это, но я думаю, что вы можете сделать это довольно просто путем разделения шестнадцатеричной строки и передавая каждую часть через 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

Это работало безупречно. Благодаря тонну! –

3

Убейте его старой школой и бросьте свой собственный. Это не совсем ракетостроение здесь:

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

Также очень приятно, спасибо –

12

Для тех из вас, кто ищет ответ, используя полную платформу .NET для ПК.

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

см: MSDN Documentation

+1

спасибо за ваш длинный ответ .... :) – printfmyname