Hex zu Dez

  • Hallo...
    hab mal wieder ein problem und zwar soll ich ein programm schreiben wo ich ein hex zahl zu einer dez zahl umwandeln soll
    die hex zahl wir mit einem chip eingelesen so das sie dann z.b. in notepad ausgegeben wird
    naja hier mal so weit wie ich bin

    [autoit]

    run("notepad")
    WinWaitActive("Unbenannt - Edi")
    sleep(5000);hier wird der code eingelesen
    send("{shiftdown}{up}{shiftup}")
    sleep(100)
    $hex = ("{ctrldown}{c}{ctrlup}")
    $dez = Dec($hex)
    sleep(100)
    send("{down}{=}")
    send($dez)

    [/autoit]

    MfG Knuckels

    Einmal editiert, zuletzt von Knuckels (21. September 2010 um 16:33)

  • So sollte das klappen...
    Nur wie der Code eingelsene wird, kann ich nicht sagen.
    Ich kenn das Gerät ja nicht.
    Um mit der Zwischenablage zu arbeiten, kannst du auch Clipput() der Clipget() verwenden. :)

    [autoit]

    run("notepad")
    WinWaitActive("Unbenannt - Edi")
    sleep(5000);hier wird der code eingelesen
    send("{shiftdown}{up}{shiftup}")
    sleep(100)
    $hex =ClipGet()
    $dez = Dec($hex)
    sleep(100)
    send("{down}{=}")
    send($dez)

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    GUICreate("", 300, 100)

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

    $input = GUICtrlCreateInput("", 0, 0, 200, 40)
    $label = GUICtrlCreateLabel("", 200, 0, 100, 40)
    $button = GUICtrlCreateButton("OK", 0, 40, 300, 60)

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

    GUISetState()

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

    while 1
    $msg = GUIGetMsg()

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

    Switch $msg
    case $GUI_EVENT_CLOSE
    Exit
    Case $button
    If GUICtrlRead($input)="" Then
    MsgBox(16, "", "Gib bitt ewas ein")
    ElseIf Not StringIsXDigit(GUICtrlRead($input)) Then
    MsgBox(16, "", "Falschesm Zeichen")
    Else
    GUICtrlSetData($label, Dec(GUICtrlRead($input)))
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Damit sollte es funktionieren. Dann musst du auch nicht diese blöden Send-Befehle nehmen um den Editor zu steuern.
    Die Befehle sind in der Hilfe ausreichend dokumentiert. Damit kannst du herausfinden, was sie bedeuten.

  • das ist ein USB gerät der, wenn der Chip in die nähe kommt halt seine erkennungsnummer aufschreibt wie hier halt in notepad
    dann soll er die nummer kopieren und dann umwandeln nur leider kommt dann 0 raus =(

    Hmm... kommt wieder bei mir 0 raus =(

    MfG Knuckels

    Einmal editiert, zuletzt von Knuckels (21. September 2010 um 15:39)

  • Edit: Irgendwie bin ich heute richtig langsam...

    Wie viele Zeichen hat den deine Hexnummer. Kannst du da mal ein Beispiel geben?

    Spoiler anzeigen

    Erstelle am besten deine eigene GUI mit Input, dann kannst du das ganze Send weglassen.

    [autoit]

    #include <WindowsConstantsEx.au3>
    $hGUI = GUICreate("InsertCode", 200, 20)
    $iInput = GUICtrlCreateInput("", 0, 0, 200, 20)
    GUISteState(@SW_SHOW)
    WinActivate($hGUI); nur zur sicherheit
    GUICtrlSetState($iInput, $GUI_FOCUS)
    While 1
    If GUIGetMsg() = -3 Then Exit ; Abbrechen wenn GUI geschlossen wird
    If GUICtrlRead($iInput) <> '' Then
    Sleep(1000) ; 1 Sekunde warten, bis alles eingegeben wurde
    $sText = GUICtrlRead($iInput)
    MsgBox(0, "", $sText & @CRLF & Dec($sText))
    Exit
    EndIf
    WEnd

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Umwandeln", 285, 207, -1, -1)
    $Input1 = GUICtrlCreateInput("Input1", 80, 56, 121, 21)
    $Input2 = GUICtrlCreateInput("Input2", 80, 112, 121, 21)
    $Label1 = GUICtrlCreateLabel("Input", 80, 40, 28, 17)
    $Label2 = GUICtrlCreateLabel("Output", 80, 96, 36, 17)
    $Button1 = GUICtrlCreateButton("Umwandeln", 96, 160, 83, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Hex=GUICtrlRead($Input1)
    $Dec=Dec($Hex)
    GUICtrlSetData($Input2, $Dec)
    EndSwitch
    WEnd

    [/autoit]

    Edit:
    Oh. Das Antwortfenster zu lange aufgelassen.. :love:

  • Also denn chip denn ich hier hab hat die nr
    0105c0aa90
    @Propandy
    bei deinem code fehlt mir WindowsConstantsEx.au3 =(

    MfG Knuckels

  • Oh. Bei mir kommt auch 0 raus 8|
    Edit: Bei einem Online Konverter kommt der Fehler: "Error - Zahl zu hoch"
    Sieht nach Overflow aus..

  • ich weiß ja welche zahl raus kommen sollte :P ist halt ein sticker drauf aber der wird danach angemacht
    raus kommen sollte: 4391479952

  • Oh, Ich habe WindowsConstants statt GUIConstants geschrieben, sry.
    Das was du vorhast, musst du in 2 Schritten machen, Dec schafft nur 32-bit Zahlen, nicht 64bit.

  • Ui na toll...
    Wie kann ich das dann machen??=(
    aber was mich beruhigt ist, das ich kein fehler bei mir drin hatte :P

    MfG Knuckels

    • Offizieller Beitrag

    Eigene Funktion benutzen:

    [autoit]

    $hex = "0105c0aa90"
    ConsoleWrite(_Dec($hex) & @CRLF)

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

    Func _Dec($sHex)
    Local $exp = 0, $dec = 0, $a = StringSplit($sHex, '')
    For $i = $a[0] To 1 Step -1
    $dec += Dec($a[$i])*(16^$exp)
    $exp += 1
    Next
    Return $dec
    EndFunc

    [/autoit]
  • Oder so:

    [autoit]

    $s = "0105c0aa90"

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

    $ui = DllStructCreate("uint64")
    $b = DllStructCreate("int[2]", DllStructGetPtr($ui)) ; zwei Ints auf gleichem Speicher wie UINT64
    DllStructSetData($b, 1, Dec(StringRight($s, 8)), 1) ; Setze untere Hälfte
    DllStructSetData($b, 1, Dec(StringTrimRight($s, 8)), 2) ; Setze obere Hälfte
    $iResult = DllStructGetData($ui, 1)

    [/autoit]
    • Offizieller Beitrag

    wo müsste ich denn jetzt diese funktion einfügen


    Schau dir progandys Bsp. (Post 7) an.
    Dort ersetzt du

    [autoit]

    MsgBox(0, "", $sText & @CRLF & Dec($sText))

    [/autoit]

    mit

    [autoit]

    MsgBox(0, "", $sText & @CRLF & _Dec($sText))

    [/autoit]

    und fügst die Funktion mit in das Skript ein.

  • Tschuldigung für Doppelpost
    aber ich hab noch ein kleines problem -.-

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    GUICreate("", 300, 100)

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

    $input = GUICtrlCreateInput("", 0, 0, 150, 40)
    $label = GUICtrlCreateLabel("", 150, 0, 100, 40)
    $button = GUICtrlCreateButton("OK", 0, 40, 300, 60)

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

    GUISetState()

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

    while 1
    $msg = GUIGetMsg()

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

    Switch $msg
    case $GUI_EVENT_CLOSE
    Exit
    Case $button
    If GUICtrlRead($input)="" Then
    MsgBox(16, "", "Gib bitt ewas ein")
    ElseIf Not StringIsXDigit(GUICtrlRead($input)) Then
    MsgBox(16, "", "Falsches Zeichen")
    Else
    GUICtrlSetData($label, _Dec(GUICtrlRead($input)))

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

    EndIf
    EndSwitch
    WEnd

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

    ConsoleWrite(_Dec($input) & @CRLF)

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

    Func _Dec($sHex)
    Local $exp = 0, $dec = 0, $a = StringSplit($sHex, '')
    For $i = $a[0] To 1 Step -1
    $dec += Dec($a[$i])*(16^$exp)
    $exp += 1
    Next

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

    Return $dec

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

    EndFunc

    [/autoit]


    wo muss ich da clipput() einfügen damit er die zahl die er da raus bekommt in denn zwischenspeicher packt=(
    ich bekomm das irgentwie nicht hin X(
    MfG Knuckels

  • Hab noch kleine Rechtschreibfehler entfernt ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $sInput

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

    GUICreate("", 300, 100)
    $input = GUICtrlCreateInput("", 0, 0, 150, 40)
    $label = GUICtrlCreateLabel("", 150, 0, 100, 40)
    $button = GUICtrlCreateButton("OK", 0, 40, 300, 60)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    $sInput = GUICtrlRead($input)
    If $sInput <> "" Then
    If StringIsXDigit($sInput) Then
    GUICtrlSetData($label, _Dec($sInput))
    ClipPut(_Dec($sInput))
    Else
    MsgBox(16, "", "Falsches Zeichen")
    EndIf
    Else
    MsgBox(16, "", "Gib bitte etwas ein")
    EndIf
    EndSwitch
    WEnd

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

    Func _Dec($sHex)
    Local $exp = 0, $dec = 0, $a = StringSplit($sHex, '')
    For $i = $a[0] To 1 Step - 1
    $dec += Dec($a[$i]) * (16 ^ $exp)
    $exp += 1
    Next
    Return $dec
    EndFunc

    [/autoit]