私が自分自身に提供するこのソリューションは、動作するように見えます。しかし、これは一方向変換であるためです。他の図書館は相違点の間を行き来する双方向の変換を目指していますが、どちらの方法も必要ありません。
Public Class BaseConverter
Public Shared Function ConvertToBase(num As Integer, nbase As Integer) As String
Dim retval = ""
Dim chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' 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
Iは、以下のリンクでC#コードに基づいて、Visual Basicで上記のコード作成:
クレジット: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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 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デバッガでコードをステップ実行すると、コードに従うのが難しくなります。変数名は明白ではなく、何をしているのかに関するコメントはありません。私はそれが基本的な変換を行うためにそれをしているように見えなかったことを私が理解していたから、それはありませんでした。
これにはリンクがあります(再帰を使用するかどうかはチェックされていません):http://www.devx.com/vb2themax/Tip/19316 – assylias
+1 @assyliasありがとうございます。今すぐチェックしてください... – therobyouknow
うん、再帰的に見える:)私は一見を持っている、それは最も読みやすいコードではなく、戻り値として関数名を使用するVBは誤解を招く可能性がありますが、はい、再帰的であるようです。だから私はそれを私のVisual Studio 2010 Express Visual Basicプロジェクトに統合してテストします。私は戻って、その後に、もしあなたが答えとしてこれを提供すれば、それを受け入れ、upvoteすることができるはずです。 – therobyouknow