Dec Zahl nach Hex Zahl umwalden

  • hallo, und zwar liefert mir eine Funktionen eine DEZ Zahl. Diese muss ich in Hex umwandeln und mit einer anderen Hex zahl addieren. Das ist die Aufgabenstellung. Ich mach immer ein Testscript und schaue ob das überhaupt mit Werten wo ich sagen kann obs stimmt oder nicht funktioniert.

    [autoit]

    $result = Hex(14)
    MsgBox(0, "", " Hexzahl " & $result ) ; Funktioniert. Gibst 0x0000000E aus
    $result2 = $result + 0x00000001
    MsgBox(0, "", " Hexzahl2 " & $result2 ); Funktioniert nicht. gibt 1 aus

    [/autoit]

    Müsste der 2 te Wert nicht 0x0000000F sein ? So stell ich mir das zu zeit vor

  • Spoiler anzeigen
    [autoit]

    $result = Hex(14)
    MsgBox(0, "", " Hexzahl " & $result) ; Funktioniert. Gibst 0x0000000E aus
    $result2 = BitOR('0x' & $result, 0x00000001)
    MsgBox(0, "", " Hexzahl2 " & Hex($result2)); Funktioniert nicht. gibt 1 aus

    [/autoit] [autoit][/autoit] [autoit]

    $result = 14
    MsgBox(0, "", " Zahl " & $result) ; Funktioniert. Gibst 0x0000000E aus
    $result2 = $result + 0x00000001
    MsgBox(0, "", " Hexzahl2 " & Hex($result2)); Funktioniert nicht. gibt 1 aus

    [/autoit]
  • also erstmal danke für deine Antwort. Ich verstehe was Bitor macht, will den Befehl aber nicht verwenden. Der ist mir zu " choatisch ". *igitigit weg damit*

    Dein 2 tes Script schaut viel angenehmer aus, ich verstehe trotzdem nicht warum es funktioniert und meines nicht

    [autoit]

    $result = 14 ; Dec zahl
    MsgBox(0, "", " Zahl " & $result) ; Dec zahl wird ausgegeben
    $result2 = $result + 0x00000001 ; Dec zahl wird mit einer Hex zahl addiert.. komisch das Autoit nicht schreit.
    MsgBox(0, "", " Hexzahl2 " & Hex($result2)) ; äpfel und birnen addiert und jetzt werd dieses Salat noch mal gemixt mit hex(...)

    [/autoit]


    Verstehe es nicht warum es funktioniert. Mein Autoit Code ist viel logischer aufgebaut funktioniert aber nicht...

    [autoit]

    $result = Hex(14) ; Hexzahl wird gespeichert
    MsgBox(0, "", " Hexzahl " & $result ) ; Funktioniert. Gibst 0x0000000E aus
    $result2 = $result + 0x00000001 ; Hex + Hex Erhöhe Hex zahl um 0x00000001 was ja genau eine erhöhung um +1 im Dez System ist
    MsgBox(0, "", " Hexzahl2 " & $result2 ); 2 Hex zahlen addiert und hier sollte eine astreine 0x0000000F stehen...

    [/autoit]


    Ich könnte stur deinen Code nehmen, will ich aber nicht weil dann werd ich immer Probleme haben. Was muss ich bei meinem Code ändern das " die Idee " gleich bleibt aber es trotzdem funktioniert ?

  • aha das sieht viel besser aus.

    Kann es sein das Hex() von sich aus nur einen " String " erzeugt und das genau das mir beim addieren dann immer das Genick bricht ?

    Ich muss sie dann vorher wieder in eine " Zahl " umwanden... wie du mit deinem int() Befehl gemacht hast ?

  • Zitat

    äpfel und birnen addiert und jetzt werd dieses Salat noch mal gemixt mit hex(...)


    Vielleicht solltest du dich mal mit dem Zahlenformat eines Computers auseinandersetzen um das zu begreifen^^
    Ein Prozessor zählt intern Nullen und Einsen zusammen, sonst nix....
    Damit das bei der Ein- und Ausgabe für die Menschen nicht so kompliziert bzw Fehleranfällig ist, wird alles aus bzw. in die "Computersprache" übersetzt. Das was du auf dem Bildschirm als Zahlenformat "siehst" oder über die Tastatur eingibst, sind einfach nur verschiedene Systeme für immer ein und dieselbe Sache, nämlich ....1010001100010010100010100101010101011111000....
    Und ob da als "Anzeigeformat" Hexadezimal, Octal, Binär, Ascii- oder Unicode oder sonstwas verwendet wird, darfst du dir aussuchen ;)

    Zitat

    Kann es sein das Hex() von sich aus nur einen " String " erzeugt

    ...aus der Hilfe rauskopiert:

    Zitat

    Hex
    Gibt einen hexadezimal konvertierten String eines Integers oder eines Binärs zurück.

    :D
    ciao
    Andy

  • hallo, danke für die Hilfe. Ich bin selber HTL Absolvent ( technische Lehranstalt ). Genug 1000111 in der Schule gehabt und studieren tue ich Mathematik... bisi Ahnung habe ich schon von der Materie. Und für mich ist

    5+0x00f ein Salat ;) entweder 0x004 +0x023 oder 3 +5

    aber das ist nicht das Thema...

    Mein Problem ist das ich jetzt 3 tolle Lösungen habe, diese aber nicht verwenden kann da ich sie nicht verstehe. Mein Problem ist das hex() einen String zurückliefert. Ich will aber keinen String haben sondern eine Hexzahl. Kann ich die umwandeln ?

    edit: Nur zur Erklärung. Ich habe eine String Allergie.Ich bin kein guter Programmierer, nicht mal ein schlechter. Ich verwende meine Erkenntnis weiter in meinem Programm. Und ich möchte mit den Werten weiterarbeiten. Ich will zahlen haben... mit dennen ich " arbeiten " kann. Wenn ich jetzt in mein Programm Strings einbaue, bringe ich die Pest unters Volk ;) wenn ihr versteht was ich meine.

    Einmal editiert, zuletzt von Bullz (8. Juli 2009 um 09:49)

    • Offizieller Beitrag

    Hallo

    Also. AutoIt konvertiert 0x000001 automatisch in 1. Wenn du z.B. MsgBox(0,"",0x00001) machst, kommt 1 raus wenn du aber MsgBox(0,"","0x000001") machst kommt der "Hex"-Wert als String raus.
    Der Befehl Hex macht ja auch nicht eine Zahl wie 0x00001 sondern macht 00001 (ohne diesem 0x davor) Sobald du aber wie gesagt ein 0x vor eine Zahl klemmst (und das natürlich kein String ist) wird die Zahl automatisch in ein Integer konvertiert von AutoIt
    AutoIt kennt in dem Sinne garkeine hexidezimalen Zahlen. Warum auch? Wozu brauch man das - außer evtl zur ausgabe (und da kann man dann ja Hex verwenden.)
    Rechnen kannst du damit trotzdem wie du willst.

    Spoiler anzeigen
    [autoit]

    $calc1 = 0x01 + 0x03
    $calc2 = 1 + 0x03
    $calc3 = 0x0f - 4
    $calc4 = 555 - 0xff

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"",$calc1&@CRLF&$calc2&@CRLF&$calc3&@CRLF&$calc4)
    MsgBox(0,"","0x"&Hex($calc1,2)&@CRLF&"0x"&Hex($calc2,2)&@CRLF&"0x"&Hex($calc3,2)&@CRLF&"0x"&Hex($calc4,2))

    [/autoit]

    Mfg Spider

  • Zitat

    Und für mich ist 5+0x00f ein Salat..... aber das ist nicht das Thema...

    Doch! Genau DAS ist das Thema, denn wenn du

    Zitat

    Ich will zahlen haben... mit dennen ich " arbeiten " kann

    als Vorgabe hast, dann musst du GENAU damit arbeiten.

    Zitat

    Genug 1000111 in der Schule gehabt und studieren tue ich Mathematik... bisi Ahnung habe ich schon von der Materie

    wzbw..... :D
    Spass beiseite:

    Zitat

    Ich will aber keinen String haben sondern eine Hexzahl

    Was ist eine "HexZahl"? Was willst du damit "arbeiten"?

    Zitat

    entweder 0x004 +0x023 oder 3 +5

    ..oder sieben plus fünf gleich zwölf?

    Zitat

    und zwar liefert mir eine Funktionen eine DEZ Zahl. Diese muss ich in Hex umwandeln und mit einer anderen Hex zahl addieren

    s. GtaSpiders Post
    ciao
    Andy

  • also danke das ihr mit geholfen habt....

    Mein Denkproblem hat Spider glaub ich schon erkannt. Ich wollte in einem reinen Hex Modus arbeiten... was in Autoit gar nicht geht. Hex() ist eine Funktion die zur Ausgabe verwendet wird. Ich wollte hex hernehmen und damit " rechnen " . Spiele mich gerade mit memory rum. Und dort ist alles auf Hex getrimmt.

    Jetzt hab ich einfach stur addiert. Autoit mit Dez rechnen lassen und nur meine Ausgaben mit hex() überprüft und es funktioniert. _Memoryread() frisst neamlich Dez zahlen und nicht wie ich geglaubt habe ... nur hex zahlen.

    in meinem Kopf wollte ich das so machen hex(5) + hex(9) = 0x0000000E Das funktioniert aber so mit autoit nicht. Ich muss 5 + 9 = 14. Damit dann weiter programmieren und wenn ich will kann ich es mir mit hex(14) ausgeben lassen. Soda jetzt wisst ihr was in meinem Kopf war.