schöner topicname XD
hallo leute
ich ein schönes system von jmd gefundne, welches eine zeichenfolge (kann aus nummer und oder zeichen gestehen) von einem ins andere zahlensystem umwandelt, also z.b. so:
number: "12"
from: "012345679" (dezimalsystem)
to: "01" (binär)
man könnte aber auch so schreiben:
number: "12"
from "0132456789"
to: "G/!\_j)de9=" (wieder dezimal, nur mit andern zeichen) ...
das ganze war in einer java ähnlichne variante geschrieben, welches dür ein spiel genutzt wird.
ich hab den jenigen gefragt ob ich es verwenden und in vb.net umschreiben darf und er hat zugestimmt.
hier mal das system:
Public Function ConvertNumber(ByVal number As String, ByVal base_alphabet_from _
As String, _
ByVal base_alphabet_to As String) As String
Dim base_from As Integer = Len(base_alphabet_from)
Dim base_to As Integer = Len(base_alphabet_to)
Dim null_from As String = base_alphabet_from.Substring(0, 1)
Dim new_number As String = ""
Dim result_division As String
Dim result_modulo As Integer
Dim result_div As Integer
Dim index As Integer
Try
Do
index = 0
result_modulo = base_alphabet_from.IndexOf(number.Substring(0, _
1))
result_division = ""
Do
If (result_modulo >= base_to) Then
result_div = result_modulo / base_to
result_division = result_division + (SubRight( _
base_alphabet_from, result_div, result_div + _
1)).ToString
result_modulo = result_modulo - (result_div * base_to)
Else
result_division = result_division + null_from
End If
index = index + 1
If index >= Len(number) Then
Exit Do
End If
result_modulo = (result_modulo * base_from) + _
base_alphabet_from.IndexOf(SubRight(number, index, index _
+ 1))
Loop
index = 0
Do
If index >= Len(result_division) Then
Exit Do
End If
If SubRight(result_division, index, index + 1).ToString _
<> null_from Then
Exit Do
End If
index = index + 1
Loop
result_division = SubRight(result_division, index, Len( _
result_division))
new_number = (SubRight(base_alphabet_to, result_modulo, _
result_modulo + 1)).ToString + new_number
number = result_division
Loop Until number = ""
Catch e As Exception
MsgBox(e.ToString)
End Try
Return new_number
End Function
Public Function SubRight(ByVal text As String, ByVal start As String, ByVal _
lange As String) As Integer
Try
Return text.Substring(start, lange)
Catch ex As Exception
Return SubRight(text, start, lange - 1)
End Try
End Function
'Aufruf:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
txtnew.Text = ConvertNumber(txtnumber.Text, txtfrom.Text, txtto.Text)
End Sub mein problem ist, dass die variable result_modulo irgendwann (warum auch immer) negativ wird, und das ganze in meiner function "SubRight" eine endlosschleife auslöst.
SubRight hab ich geschrieben, da bei dem normalen SubString in vb.net ein fehler auftritt, der bei der andern "programmierSprache" nicht existiert, undzwar das wenn die längen angabe bei SubString länger ist, als die noch vorhandenen zeichen.
mfg
ani |