如何将该十六进制字符串转换为长整型?

16

我手头有一个16进制字符串"0xE94C827CEB", 需要转换成字符串 "1002011000043" (dd mm yyyy HH mm ss) 格式的日期时间。

可惜我不知道该如何将其从字符串格式转换,因为我正在使用.NET微框架(另外,也没有NumberStyles命名空间可用)。是否有可以帮助我完成转换的函数呢?

谢谢!


找到它只需要几分钟 http://msdn.microsoft.com/en-us/library/ee435453.aspx - Jodrell
4个回答

39

对于那些想要在个人电脑上使用完整的.NET框架的人来说,以下是答案:

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

见: MSDN 文档


1
适用于.NET Core 3.1。 - Damn Vegetables

17

我不知道是否有现成的函数可以完成这个任务,但我认为你可以通过将十六进制字符串切分成若干部分,并将每部分依次传递给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

4

回归老派,自己动手。这并不是什么高深的科学:

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 ;
}

谢谢。对我很有帮助 :) - Dmitry Vasilyuk Just3F

1
使用位移操作符可以简化一些代码--
  static long HexToLong(string hexString)
    {
        if (!string.IsNullOrWhiteSpace(hexString))
        {
            hexString = hexString.Trim();
            if (hexString.StartsWith("0x"))
                hexString = hexString.Substring(2);
            if (hexString.Length > 16)
                throw new FormatException("Input string is too long");
            hexString = hexString.PadLeft(16, '0'); // ensure proper length -- pad the leading zeros

            int part1 = Convert.ToInt32(hexString.Substring(0, 8), 16); // first 4 bytes
            int part2 = Convert.ToInt32(hexString.Substring(8, 8), 16);//the last 4 bytes
            return (part1 << 8 * 4) + part2;  // slide it on over -- 8 bits per byte
        }
        return 0;
    }

给你,不用谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接