Hex Werte Addieren mit Basiswert 0000

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Xylon.

    Hex Werte Addieren mit Basiswert 0000

    Hallo!

    also ich schreibe gerade ein Programm. (Wie überraschend ne? 8o ) Ich muss dabei jedenfalls Hex werte addieren. Außerdem sind es immer 4 stellige Werte. Wenn es nur dreistellige sind wird eine 0 vorne drangehängt. Normalerweise kommt das ja nicht vor, daher dachte ich ich deklariere diese Werte mal als Object und gebe ihnen jeweils den Wert, und wandle dann in einen Integer Wert wiefolgt um:

    VB.NET-Quellcode

    1. Ergebnis = Hex(Val("&H" & value1) + Val("&H" & value2))
    2. MsgBox(Ergebnis)


    Allerdings gibt er mir dann immer noch keine 4stellige Zahl an, wenn ich z.B. den Wert 0800 habe. Der Basiswert ist übrigens 0000, und da soll dann in Hex immer der jeweilige Wert draufgerechnet werden.

    z.B.:

    Wert1 = 0800
    Wert2 = 0400

    Endwert = 0C00

    Habs auch schon mit Konvertierung in String versucht. Leider kann ich den Wert dann nicht einfach umrechnen. Normal, also 800 und 400 wären ja 1200 und in Hex dann 4B0, passt also nicht :P

    Xylon schrieb:

    Normal, also 800 und 400 wären ja 1200 und in Hex dann 4B0

    Ich weiß nicht, wie du darauf kommst. 0x800 + 0x400 ist ja nicht dezimal 1200.
    Du solltest jedoch die richtigen Funktionen zum Convertieren verwenden:

    VB.NET-Quellcode

    1. Dim val1 = Convert.ToInt32("800", 16)
    2. Dim val2 = Convert.ToInt32("400", 16)
    3. MessageBox.Show((val1 + val2).ToString("X4"))
    @Artentus: Nee aber dezimal 800 und 400 sind 1200 :P
    Hiervon hör ich zwar jetzt zum ersten mal aber solange es funktioniert :D Soll ich dann den Basis Wert 0000 als String nehmen? Sonst würde das ja zu 0 und am Ende soll eine 0 davor.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xylon“ ()

    Darum kümmert sich der Code schon alleine, das X4 sorgt dafür, dass immer eine 4stellige Hex-Zahl rauskommt.
    Und ich weiß, dass 800 + 400 = 1200 gilt, aber oben liest dus auch als Hexadezimalzahl ein, was dann natürlich auch nicht 1200 sondern eben 0xC00 ergibt.

    Xylon schrieb:

    Ich muss dabei jedenfalls Hex werte addieren.
    Hexadezimal ist einzig allein eine Stringrepräsentation eines rechnerinternen Wertes.
    Andere Stringrepräsentationen wären z.B. oktal, dezimal, duodezimal (Basis 12), hexagesimal (Basis 60 - Sekunden, Minuten).
    Bei Hexadezimal stimmt diese Repräsentation sehr gut mit den Ganzzahlen der Rechner überein, dort muss allerdings dazu gesagt werden, ob das Werte mit oder ohne Vorzeichen sind. Hast Du dies bei Deinen Hex-Rechnereien berücksichtigt?
    Ich denke nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Die Hex werte sind ohne vorzeichen, daher hab ich auch versucht erst dezimal zu rechnen. Zur not wäre das auch gegangen (800 + 400 = 1200, erste beiden Ziffern in Hex mit Replace = C00) Aber so ists leichter.

    Edit: Habs gerade ausprobiert. Funktioniert leider nicht für meinen Verwendungszweck weil ich die Werte erst dann habe wenn der Benutzer eine CheckBox anklickt (Cb1 = 800 usw.)

    Ist aber nicht schlimm, ich machs jetzt anders.

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