Код программы перевода числа из произвольной системы счисления в другую произвольную
Часто необходимо перевести число из одной системы счисления в другую. Предлагается программный код статического класса, который реализует данную функциональность в виде статического метода ConvertFromTo(), а также дополнительных методов расширения.
Программный код для перевода чисел в разных системах счисления (разворачивается)
''' <summary> ''' Вспомогательные. ''' </summary> <Runtime.CompilerServices.Extension()> Public Module Helpers ''' <summary> ''' Преобразует число из десятичной системы счисления в число в восьмеричной системе счисления. ''' </summary> <Runtime.CompilerServices.Extension()> Public Function ToOctal(dec As Integer) As Integer Return ConvertFromTo(dec, 10, 8) End Function ''' <summary> ''' Преобразует число из десятичной системы счисления в число в двоичной системе счисления. ''' </summary> <Runtime.CompilerServices.Extension()> Public Function ToBinary(dec As Integer) As Integer Return ConvertFromTo(dec, 10, 2) End Function ''' <summary> ''' Преобразует число из заданной системы счисления в другую. ''' </summary> ''' <param name="number">Число в исходной системе счисления.</param> ''' <param name="fromBase">Исходная система счисления.</param> ''' <param name="toBase">Целевая система счисления.</param> ''' <remarks> ''' Будьте внимательны: при переводе в двоичную систему может возникнуть ошибка переполнения, т.к. двоичные числа могут быть очень длинные. ''' Также здесь не реализован перевод чисел из и в 16-ную систему счисления, в которой применяется цифро-буквенная нотация. </remarks> Public Function ConvertFromTo(number As Integer, fromBase As Integer, toBase As Integer) As Integer Dim result As Integer = 0 Dim i As Integer = 0 Do While (number <> 0) result += (number Mod toBase) * CInt(Math.Pow(fromBase, i)) number = CInt(Math.Truncate(number / toBase)) i += 1 Loop Return result End Function End Module
Теги :