HEX Taschenrechner - Probleme bei + Plus aufgaben

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    HEX Taschenrechner - Probleme bei + Plus aufgaben

    Moin

    Habe vor einen HEX Rechner zu erstellen dass mir eine neue position ausrechnet in VB hab nur ein klitzekleines Problem.
    Man kann ja mit DIM sachen definieren zb. als Integer,Decimal,long,short,double,string,typ,bloean,int32,int16,int64 und soweiter...
    Ich finde nur nix für Hex. Hat Visual Basic nix für HEX was man definieren möchte ?

    Weil mein rechner sonst das ergebnis falsch ausrechnet.

    TXTBOX1 kommt startoffset hin wo er suchen soll.
    TXTBOX2 schreibt man hin um wie viele stellen er weiter suchensoll von der normalen HEXphalbet^^(KP wie mans nennt) das nur aus 16 Ziffern/buchstaben besteht :

    0123456789ABCDEF

    Und wenn ich jez da normal ihn befehler das er txtbox1 und 2 zusammen kombinieren soll indem er + rechnen soll denkt er ich will dass er die textbox zahlen in + zusammenrechnen wie beim taschenrechner und rechnet falsch um da bei ihm keine A B C D E F als "Zahl zum rechnen" gibs.

    Ich könnte jetzt die suche in INT umwandeln und easy beenden oder die buchstaben als zahlen definieren zb. bei A = soll er immer +10 rechnen aber will vorher wissen ob hier ein experte rum rennt die mir vill. helfen könnten :(

    Suche halt sowas passenes für Dim TXTBox1 As "HEX" = textbox1.text
    Würde das gleiche programmieren was der normale Taschenrechner auf jedem PC hat wenn man im Menü bei Ansicht auf Programmierer geht.

    Tausend dank schonmal an alle!!!!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „taylan15“ ()

    Wandelst du die Zahlen eigentlich in HEX um?
    Wenn nicht, schreib ich dir mal, wie das geht:

    Gehe nach folgendem Verfahren vor:

    (1) Teile die Zahl mit Rest durch 16.
    In VB geht das meines Wissens nach mit ZAHL mod 16.

    (2) Der Divisionsrest ist die nächste Ziffer (von rechts nach links).
    Für Reste > 9 nimm die Buchstaben A, B, C, D, E, F

    (3) Falls der (ganzzahlige) Quotient = 0 ist, bist du fertig,
    andernfalls nimm den (ganzzahligen) Quotienten als neue Zahl
    und wiederhole ab (1).

    Das ergebnis wird in umgekehrter Reihenfolge ausgegeben.

    Eigentlich ganz einfach.
    Jetzt ein Beispiel anhand der Dezimalzahl 1000:

    1000 : 16 = 62 Rest: 8 --> Ziffer: 8
    62 : 16 = 3 Rest: 14 --> Ziffer: E
    3 : 16 = 0 Rest: 3 --> Ziffer: 3

    Resultat: 3E8
    @MarcoQuinten
    Tausend dank schonmal TY aberIch will kein Decimal in Hex rechner oder gilt das NUR für HEX Zahlen weil du da im beispiel ja decimal 1000 benutzt hattest :(?

    Ich will NUR HEX und NIX KONVERTIEREN und auch KEINE ANDERE UMGEWANDELTE Einheiten nutzen falls ich dein text jetzt falsch verstanden habe.
    Im Hintergrund wird/sollte alles Integer sein mit dem Du bzw. .NET rechnet - die Ausgabe und Eingabe ist nur eine Frage der Darstellung.

    VB.NET-Quellcode

    1. ' Hexstring to Integer
    2. dim dec as integer=Convert.ToInt32("ff", 16) ' ergibt 255
    3. ' integer zu HexString
    4. dim hex as string=Convert.ToString(255, 16) ' Ergibt "ff".


    Du kannst natürlich auch einen eigenen Parser entwickeln der die Rechnung übernimmt, so wie der Computer bzw der eingebaute Prozessor für Binärrechnungen beinhaltet - aber macht das Sinn ?

    taylan15 schrieb:

    Also erst die Boxen müssen als decimal sein

    Nein, was in Textboxen steht ist erst einmal immer alles String - egal ob Ein- oder Ausgabe. Mit CInt(Textbox1.text) würdest Du versuchen den Inhalt der Textbox als Decimalstring zu 'parsen', mit der obigen Methode versucht Du den Text als Hexzahl zu interpretieren.

    taylan15 schrieb:

    @Kangaroo
    Also erst die Boxen müssen als decimal sein->Dann wenn man button klickt für fertig, soll er alles in hex umwandeln was in den boxen stand

    taylan15 schrieb:


    ch will NUR HEX und NIX KONVERTIEREN


    lol was denn jetzt?
    Wird Dec eingegeben und in Hex umgewandelt oder wird Hex eingegeben, gerechnet und Hex ausgegeben?
    @MarcoQuintin Ja wollte den ebitrag noch editieren amfang sollte erst hex sein ^^ und umgekehrt derest was ich geagt hatte

    @Kangaroo Versucht aber probleme weil ich die i wie als dec definiert hab :S
    Ich will nur HEX eingabe in die Boxen und HEX soll aus Ausgabe von meinem tool sein
    Das ganze konvertieren bräuchte ich nciht was du geposted hattest weil er nur mit hex arbeiten soll wenn möglich.
    Könnte jemand BITTE mal helfen hab selber versucht hier mein Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. 'Textbox1.Text = Start Position
    4. 'Textbox2.Text = Die Zahl eingeben, Um wie viel er die Startposition + diese ZAHL rechnen soll
    5. 'Textbox3.Text = Ergebniss des neuen Offsets
    6. 'DEFINATIONEN
    7. Dim dec1 As Integer = Convert.ToInt32(TextBox1.Text, 16)
    8. Dim dec2 As Integer = Convert.ToInt32(TextBox2.Text, 16)
    9. Dim dec3 As Integer = Convert.ToInt32(TextBox3.Text, 16)
    10. Dim hex1 As String = Convert.ToString(TextBox1.Text, 16)
    11. Dim hex2 As String = Convert.ToString(TextBox2.Text, 16)
    12. Dim hex3 As String = Convert.ToString(TextBox3.Text, 16)
    13. 'Alle Textbox Eingaben erstmal in Decimal umwandeln
    14. TextBox1.Text = dec1
    15. TextBox2.Text = dec2
    16. TextBox3.Text = dec3
    17. 'Textboxen sollen zusammen gerechnet werden in der Dec format
    18. TextBox3.Text = TextBox1.Text
    19. TextBox3.Text += TextBox2.Text
    20. 'Alle Zahlen wieder zurück in HEX umgewandelt werden
    21. TextBox1.Text = hex1
    22. TextBox2.Text = hex2
    23. TextBox3.Text = hex3
    24. End Sub
    25. End Class


    Jedoch wird dort bei Dim hex1,2&3 folgende zeilen als fehler markiert:

    Convert.ToString(TextBox1.Text, 16)
    Convert.ToString(TextBox2.Text, 16)

    Convert.ToString(TextBox3.Text, 16)


    Fehlermeldung: Fehler bei der Überladungsauflösung, da keine zugreifbare "ToString" ohne einschränkende Konvertierung aufgerufen werden kann

    Irgendwer mit Tipps/Lösungen :(

    Danke!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „taylan15“ ()

    Du hast alles was du brauchst von Kangaroo bekommen.
    Du musst dir folgendes verinnerlichen:Textbox
    Text ist immer String. Mit Strings kann man nicht rechnen. Also ist ein Konvertieren in einen entsprechenden Datentyp immer notwendig. Da es sich auch bei HEX um Ganzzahlen mit der Basis 16 handelt, liegt da Integer am nächsten dran. Damit wird gerechnet und dann mit Umwandlung wieder als String ausgegeben.
    A.nders geht's in .Net nicht.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    @Vatter

    Weis ich doch hab mein Code geposted hätt eigl. funktionieren sollen aber tut es nicht.
    Hatte alles wie du gesagt hast gemacht im coden.
    Könntest du bitte ein Auge rauf werfen -> Post #9

    Komme nimmer weiter da hab ich fehlrmeldung beim zurück konvertieren :(
    Danke
    Hier der Code von HexString in Integer und von Integer zurück in DecimalString ( 2 Textboxen, 2 Buttons):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private InterneZahl As Integer
    3. Private Sub btnHexToDec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHexToDec.Click
    4. Try
    5. ' Textbox1 Inhalt als Hex parsen
    6. InterneZahl = Convert.ToInt32(textboxHex.Text, 16)
    7. ' in Textbox 2 als Decimal string ausgeben
    8. textBoxDec.Text = CStr(InterneZahl)
    9. Catch ex As Exception
    10. MessageBox.Show(String.Format("Der Text kann nicht als Hexadecimal interpretiert werden: {0}", textboxHex.Text))
    11. Return
    12. End Try
    13. End Sub
    14. Private Sub btnDecToHex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecToHex.Click
    15. Try
    16. ' Textbox2 als Decimal parsen
    17. InterneZahl = Convert.ToInt32(textBoxDec.Text, 10)
    18. Catch ex As Exception
    19. MessageBox.Show(String.Format("Der Text kann nicht als Decimal interpretiert werden: {0}", textBoxDec.Text))
    20. Return
    21. End Try
    22. ' zahl in Textbox1 als Hex ausgeben
    23. textboxHex.Text = Convert.ToString(InterneZahl, 16)
    24. End Sub
    25. End Class


    Hier das Projekt:
    Dateien
    • HexProjekt.rar

      (56,11 kB, 80 mal heruntergeladen, zuletzt: )
    Sry, aber dieser Müll ist nicht dein Ernst oder? Du solltest schon wissen, dass das Ziel einer Zuweisung links vpm "=" stehen muss. Und schrieb ich nicht gerade, dass Textboxen Strings enthalten, mit denen NICHT GERECHNET WIRD?
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    taylan15 schrieb:

    Okay tausend dank bruder, bin dir alles schuldig.

    Für meinen Bruder bist Du eindeutig zu jung ...

    Du postest zu schnell, versuch einfach mal zuerst zu verstehen was Dir die Leute hier antworten. Alle haben Dir richtige Tips gegeben, die Du nur nicht verstanden hast bzw zu schnell pauschal abgelehnt hast. Der Fehler lag bei Dir.

    Strings = Text. Mit Strings kann man nicht rechnen
    Integer=interne Zahl. Integer kann man nicht anschauen oder eingeben.

    Also wird in .NET ständig hin- und herkonvertiert.

    Kleiner Tip den Du hier oft siehst: setze in Deinen Projekten im Option Strict On, das bringt Dir eine Menge bei da die automatischen Konvertierungen wegfallen.