2015-12-09 20 views
3

У меня были бы значения bin/oct/dec/hex значений ulong как строка. Поэтому мне нужно использовать convert.tostring (, base) с нужной базой. Чтобы поддержать это, я передал значение ulong длинным, а long поддерживается с помощью convert.tostring (, base), чтобы иметь значение bin/oct/dec/hex как строку для ulong. Я прав?C# не поддерживается ulong to bin/oct/dec/hex string -> Convert.ToString (ulong, base)

//while Convert.ToString does not support ulong with base 
//Convert.ToString(ulong.MaxValue, 2); 

// following code sample is the same like not supported ToString on line 2, right? 
ulong ul = ulong.Maxvalue; 
long l = (long)ul; 
Convert.ToString(l, 8); //8 => oct, 2 => bin 

ОК, для dec, я просто могу использовать ul.ToString(); для Hex, ul.ToString ("X");

Основано на, Copy bits from ulong to long in C# Я немного смущен. Это дает мне правильное представление строки и бина для ulong?

связанная суть: https://gist.github.com/chubbson/375b535243c166d28119

+0

Вы не можете отличить MaxValue от улунга до длинного. –

+0

MaxValue - всего лишь пример, это может быть любое значение ulong. Я знаю, что значение отличается от подписанного с unsigned, но шестнадцатеричное восьмеричное и двоичное представление должно быть одинаковым или я ошибаюсь? – had

+0

Он должен быть таким же –

ответ

0

Ваш процесс преобразования должен работать до тех пор, как типы вы переходящие не имеет понятия отрицательных, так что вы должны быть безопасными, чтобы сделать каждую базу за исключением 10.

public static void Main() 
{ 
    ulong ul = ulong.MaxValue; 
    long l = (long)ul; 
    var s = Convert.ToString(l, 8); //8 => oct, 2 => bin 
    Console.WriteLine(s); //Outputs 1777777777777777777777 
} 

https://dotnetfiddle.net/fsoIkw

0

Convert.ToString только позволяет конвертировать базы для типов байт, INT, короткие и длинных. Последовательность BasedValueConverter позволяет представление bin/oct/dec/hex для байта, sbyte, short, ushort, int, uint, long, ulong.

проверить связанные https://gist.github.com/chubbson/375b535243c166d28119 для реализации класса BasedValueConverter. Это результат (LinqpadScript):

BasedValueConverter bvc; 
bvc = new BasedValueConverter(byte.MaxValue.Dump("BasedValueConverter byte")); 
bvc.ToStringBin().Dump(); // 11111111 
bvc.ToStringOct().Dump(); // 377 
bvc.ToStringDec().Dump(); // 255 
bvc.ToStringHex().Dump(); // FF 

bvc = new BasedValueConverter(byte.MinValue); 
bvc.ToStringBin().Dump(); // 00000000 
bvc.ToStringOct().Dump(); // 000 
bvc.ToStringDec().Dump(); // 000 
bvc.ToStringHex().Dump(); // 00 



bvc = new BasedValueConverter(sbyte.MaxValue.Dump("BasedValueConverter sbyte")); 
bvc.ToStringBin().Dump(); // 01111111 
bvc.ToStringOct().Dump(); // 177 
bvc.ToStringDec().Dump(); // 127 
bvc.ToStringHex().Dump(); // 7F 

bvc = new BasedValueConverter((sbyte)-1); 
bvc.ToStringBin().Dump(); // 11111111 
bvc.ToStringOct().Dump(); // 377 
bvc.ToStringDec().Dump(); // -001 
bvc.ToStringHex().Dump(); // FF 



bvc = new BasedValueConverter(short.MaxValue.Dump("BasedValueConverter short")); 
bvc.ToStringBin().Dump(); // 0111111111111111 
bvc.ToStringOct().Dump(); // 077777 
bvc.ToStringDec().Dump(); // 32767 
bvc.ToStringHex().Dump(); // 7FFF 

bvc = new BasedValueConverter((short)-1); 
bvc.ToStringBin().Dump(); // 1111111111111111 
bvc.ToStringOct().Dump(); // 177777 
bvc.ToStringDec().Dump(); // -00001 
bvc.ToStringHex().Dump(); // FFFF 



bvc = new BasedValueConverter(ushort.MaxValue.Dump("BasedValueConverter ushort")); 
bvc.ToStringBin().Dump(); // 1111111111111111 
bvc.ToStringOct().Dump(); // 177777 
bvc.ToStringDec().Dump(); // 65535 
bvc.ToStringHex().Dump(); // FFFF 

bvc = new BasedValueConverter(ushort.MinValue); 
bvc.ToStringBin().Dump(); // 0000000000000000 
bvc.ToStringOct().Dump(); // 000000 
bvc.ToStringDec().Dump(); // 00000 
bvc.ToStringHex().Dump(); // 0000 



bvc = new BasedValueConverter(int.MaxValue.Dump("BasedValueConverter int")); 
bvc.ToStringBin().Dump(); // 01111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 17777777777 
bvc.ToStringDec().Dump(); // 2147483647 
bvc.ToStringHex().Dump(); // 7FFFFFFF 

bvc = new BasedValueConverter((int)-1); 
bvc.ToStringBin().Dump(); // 11111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 37777777777 
bvc.ToStringDec().Dump(); // -0000000001 
bvc.ToStringHex().Dump(); // FFFFFFFF 



bvc = new BasedValueConverter(uint.MaxValue.Dump("BasedValueConverter uint")); 
bvc.ToStringBin().Dump(); // 11111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 37777777777 
bvc.ToStringDec().Dump(); // 4294967295 
bvc.ToStringHex().Dump(); // FFFFFFFF 

bvc = new BasedValueConverter(uint.MinValue); 
bvc.ToStringBin().Dump(); // 00000000000000000000000000000000 
bvc.ToStringOct().Dump(); // 00000000000 
bvc.ToStringDec().Dump(); // 0000000000 
bvc.ToStringHex().Dump(); // 00000000 



bvc = new BasedValueConverter(long.MaxValue.Dump("BasedValueConverter long")); 
bvc.ToStringBin().Dump(); // 0111111111111111111111111111111111111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 0777777777777777777777 
bvc.ToStringDec().Dump(); // 9223372036854775807 
bvc.ToStringHex().Dump(); // 7FFFFFFFFFFFFFFF 

bvc = new BasedValueConverter((long)-1); 
bvc.ToStringBin().Dump(); // 1111111111111111111111111111111111111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 1777777777777777777777 
bvc.ToStringDec().Dump(); // -00000000000000000001 
bvc.ToStringHex().Dump(); // FFFFFFFFFFFFFFFF 



bvc = new BasedValueConverter(ulong.MaxValue.Dump("BasedValueConverter ulong")); 
bvc.ToStringBin().Dump(); // 1111111111111111111111111111111111111111111111111111111111111111 
bvc.ToStringOct().Dump(); // 1777777777777777777777 
bvc.ToStringDec().Dump(); // -00000000000000000001 
bvc.ToStringHex().Dump(); // FFFFFFFFFFFFFFFF 

bvc = new BasedValueConverter(ulong.MinValue); 
bvc.ToStringBin().Dump(); // 0000000000000000000000000000000000000000000000000000000000000000 
bvc.ToStringOct().Dump(); // 0000000000000000000000 
bvc.ToStringDec().Dump(); // 00000000000000000000 
bvc.ToStringHex().Dump(); // 0000000000000000 

 Смежные вопросы

  • Нет связанных вопросов^_^