Похоже, это решение, которое я предоставляю себе, тоже работает! Но это потому, что это одностороннее обращение; другие библиотеки стремятся к двустороннему преобразованию, туда и обратно между разными базами, но мне не нужны оба пути.
Public Class BaseConverter
Public Shared Function ConvertToBase(num As Integer, nbase As Integer) As String
Dim retval = ""
Dim chars As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' check if we can convert to another base
If (nbase chars.Length) Then
retval = ""
End If
Dim r As Integer
Dim newNumber As String = ""
' in r we have the offset of the char that was converted to the new base
While num >= nbase
r = num Mod nbase
newNumber = chars(r) & newNumber
'use: num = Convert.ToInt32(num / nbase)
'(if available on your system)
'otherwise:
num = num \ nbase
' notice the back slash \ - this is integer division, i.e the calculation only reports back the whole number of times that
' the divider will go into the number to be divided, e.g. 7 \ 2 produces 3 (contrasted with 7 / 2 produces 3.5,
' float which would cause the compiler to fail the compile with a type mismatch)
End While
' the last number to convert
newNumber = chars(num) & newNumber
Return newNumber
End Function
End Class
Я создал вышеуказанный код в Visual Basic на основе кода C # по следующей ссылке:
КРЕДИТ: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5babf71f-4375-40aa-971a-21c1f0b9762b/
(«Преобразование из десятичной (основание-10) в буквенно-цифровую (основание-36)»)
public String ConvertToBase(int num, int nbase)
{
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// check if we can convert to another base
if(nbase chars.Length)
return "";
int r;
String newNumber = "";
// in r we have the offset of the char that was converted to the new base
while(num >= nbase)
{
r = num % nbase;
newNumber = chars[r] + newNumber;
num = num / nbase;
}
// the last number to convert
newNumber = chars[num] + newNumber;
return newNumber;
}
@ assylias Я не смог заставить devx.com / vb2themax / Tip / 19316 работать - я вернул неправильное значение. Спасибо за предложение.
Нет доказательств того, что это работает. Я настроил некоторые объявления и поверхностную структуру кода, чтобы он успешно создавался в Visual Studio Express 2010 Visual Basic. Затем пошагово прошелся по коду в отладчике Visual Studio Express 2010 Visual Basic. Код трудно понять: имена переменных неочевидны, нет комментариев о том, почему они делают то, что делают. Из того, что я понял, это было похоже на то, что для базового преобразования это не должно быть так.