2013-05-15 22 views
8

私は以下を持っています: "0xE94C827CEB"は16進数ですが、文字列です。この16進数文字列を長い文字列に変換するには?

です:1002011000043(MM HH西暦SS)

私は文字列形式でそれを持っている、と私はConvert.ToLongを持っていない場合は残念ながら、私は、変換を行う方法がわかりません(「0xE94C827CEB」、16)は.NET Micro Frameworkを使用しているために機能します(また、NumberStylesネームスペースを使用できません)。

これを変換する機能はありますか?

おかげ

+0

は、これは完璧に働いhttp://msdn.microsoft.com/en-us/library/ee435453.aspx – Jodrell

答えて

11

私はそれを行うには任意の関数を知らないが、私はあなたが16進文字列を分割し、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

あなたの答えは、PC用の完全な.NETフレームワークを使用しています。

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

参照:MSDN Documentation

+1

あなたの長い答えに感謝.... :) – printfmyname

関連する問題