С# Преобразование числа больше, чем Int64, в HexaDecimal

Я пытаюсь преобразовать большое число (например: 9407524828459565063) в шестнадцатеричное (например: 828E3DFD00000000) в С#.

Проблема в том, что число больше, чем максимальное значение Int64.

Я искал везде и не мог найти работающее решение.

Любая помощь здесь?

Спасибо.


person Salem    schedule 18.04.2012    source источник
comment
Если он больше, чем int64, как вы его получаете? Текст?   -  person GalacticCowboy    schedule 18.04.2012


Ответы (3)


Для этого я бы использовал класс System.Numerics.BigInteger. Точное решение зависит от того, в каком формате у вас есть это число: строка, двойное число, другое.

Если строка (s):

var bigInt = BigInteger.Parse(s);
var hexString = bigInt.ToString("x");

Если двойной (d):

var bigInt = new BigInteger(d);
var hexString = bigInt.ToString("x");

... и так далее.

person phoog    schedule 18.04.2012
comment
BigInteger был представлен в .Net 4.0, поэтому, если вы можете его использовать, вы можете преобразовать BigInteger в Hexadeximal. - person Erik Philips; 18.04.2012
comment
Я обнаружил, что BigInteger.ToString("X") иногда добавляет начальный ноль. Я создал методы расширения для преобразования в шестнадцатеричный, двоичный и восьмеричный (см.: stackoverflow.com/questions/14048476/#15447131), которые не содержат ведущих нулей. - person Kevin P. Rice; 16.03.2013

Возможно:

BigInteger b = 9407524828459565063;
var hex = b.ToString("X2");

Or

ulong l = 9407524828459565063;
var hex = l.ToString("X2");
person Magnus    schedule 18.04.2012

Если вы используете .NET 4.0, вы можете взглянуть на класс BigInteger:

http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

  BigInteger bi = new BigInteger();
  bi = 9407524828459565063;
  string bix = bi.ToString("X");
person wageoghe    schedule 18.04.2012