VirQ. Переводы между системами счисления в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная / Целочисленные переменные /
Переводы между системами счисления
Статей на сайте: 61

Переводы между системами счисления


Подробнее о системах счисления написано тут

Для перевода из 10-тичной системы:
[code] string s1 = Convert.ToString(28, 2); //В 2-ичную. Результат: 11100 string s2 = Convert.ToString(28, 8); //В 8-ричную. Результат: 34 string s3 = Convert.ToString(28, 16); //В 16-ричную. Результат: 1с [/code]

Для перевода в 10-тичную систему:
[code] int n1 = Convert.ToInt32("11100", 2); //Из 2-ичной системы. Результат 28 int n2 = Convert.ToInt32("34", 8); //Из 8-ричной системы. Результат 28 int n3 = Convert.ToInt32("1c", 16); //Из 16-ричной системы. Результат 28 [/code]

К сожалению, C# поддерживает только 4 системы счисления (2,8,10,16). При попытке конвертировать в 3-чную систему, в 5-чную или любую другую, отличную от 2,8,10,16, вы получите исключение:


При вводе числа, не соответствующему числу 2,8,10,16-ричных систем, скажем, 15v, то вы получите предупреждение, типа такого:


Для создания универсального конвертера можно использовать следующую функцию:
[code] string UniversalConver(string number, int fromBase, int toBase) { string r = ""; string letter = "0123456789abcdef"; number = number.ToLower(); int temp10 = 0; for (int i = 0; i < number.Length; i++) { int x = letter.IndexOf(number[i]); if (x == -1) throw new Exception(" + number + числом не является"); temp10 += x * (int)Math.Pow(fromBase, number.Length - i - 1); } while (temp10 >= toBase) { int mod = temp10 % toBase; r = r.Insert(0, letter[mod].ToString()); temp10 /= toBase; } r = r.Insert(0, letter[temp10].ToString()); return r; } [/code]
Данная функция переводит сперва число в 10-ичный формат, а потом уже в нужный (toBase).
Использовать функцию можно так:
[code] string s1 = UniversalConver("1c", 16, 2); string s2 = UniversalConver("11100", 2, 8); string s3 = UniversalConver("11100", 2, 10); [/code]
Первым параметром является само число, записанное в строковом виде в кавычках. Допустим, 1234
Вторым параметром указывается основание, в какой системе это число. Допустим, это 5-ричная система счисления
Третьим параметром указывается основание системы, В КОТОРУЮ надо перевести число. Допустим, это 3-ичная система
Тогда результат получим так:
[code] string s = UniversalConver("1234",5,3); //Результат 21012 [/code]
Здесь мы перевели число 1234 пятиричной системы в троичную.

Дополнительная информация о том, как вывести результат в консоли или WinForm