Проблема с преобразованием 32-значного шестнадцатеричного числа в длинное - PullRequest
2 голосов
/ 06 декабря 2010

Я пытался

string inpStr = "800000000000000026FFF40000000000";
long num = long.Parse(inpStr, NumberStyles.HexNumber);

и получите ошибку «Значение было слишком большим или слишком маленьким для Int64». Если я использую 16-значный шестнадцатеричный код, он работает нормально. Как заставить его работать с шестнадцатеричным значением из 32 цифр?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

Шестнадцатеричное число из 32 цифр не помещается в long (что составляет 64 бита, поэтому может содержать не более 16 шестнадцатеричных значений)

В .NET 4.0 вы можете использовать BigInteger:

const string inpStr = "800000000000000026FFF40000000000";
BigInteger num = 
      BigInteger.Parse(inpStr, System.Globalization.NumberStyles.HexNumber); 
3 голосов
/ 06 декабря 2010

Ваше значение слишком велико, чтобы поместиться в long.

В вашем 32-значном шестнадцатеричном числе используется log 2 16 32 = 128 бит;long использует только 64 бита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...