Код программы перевода числа из произвольной системы счисления в другую произвольную
Часто необходимо перевести число из одной системы счисления в другую. Предлагается программный код статического класса, который реализует данную функциональность в виде статического метода 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
Теги :
