2013-05-15 28 views
8

我有:“0xE94C827CEB”在十六进制但作为一个字符串。如何将此十六进制字符串转换为长整型?

那就是:1002011000043(年月日HH毫米SS)

不幸的是,我不知道该怎么做了转换,如果我只有它的字符串格式,我没有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

也很好,谢谢 –

相关问题