Was ist das für ein Format: 0x2FF2 ?

  • Ich habe aus der Registry einen ID-Wert ausgelesen: "0x2FF2"

    Was ist das für ein Zahlen-Format und wie bekomme ich es zu einem String oder Integer, also menschlich lesbar?

  • Ich habe in meinem Script ein Eingabefeld, in welches eine 4stellige Zahl geschrieben wird z.B "1234", es wird dann eine reg-Datei angelegt und diese registriert.
    *.reg Datei:
    [HKEY_LOCAL_MACHINE\SOFTWARE\softwareabc\]
    "ID"=hex:d2,4

    Beim Auslesen dieses Wertes aus der Registy bekomme ich 0xd204 zurück.

    Beim Umwandeln mit deinem Script kommt jedoch 53764 heraus - es sollte jedoch der Wert 1234 herauskommen.

    Einmal editiert, zuletzt von Root (24. März 2009 um 11:31)

  • Keine Ahnung warum das in der Registry verkehrt herum gespeichert wird, da ja 04D2 eigentlich 1234 ist und nicht D204. Aber egal, ich hab dir dazu eine passende Funktion geschrieben.

    [autoit]

    $binary = 0xd204

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

    MsgBox(0,"",Int(_BinaryReverse($binary)))

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

    Func _BinaryReverse($sBinary)
    Local $sBinaryHelp
    For $i = 1 To BinaryLen($sBinary) / 2
    $sBinaryHelp &= StringTrimLeft(BinaryMid($sBinary, $i, 1),2)
    Next
    Return '0x' & $sBinaryHelp
    EndFunc

    [/autoit]
  • Ich danke dir sehr.

    Ich versuche das gerade in mein Script zu integrieren, bekomme jedoch falsche Werte heraus. Vieeleicht kannst du mal drüber schauen, wo der Denkfehler liegt

    [autoit]

    For $i = 1 To 20
    $family = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\Mapsource\Families\", $i)
    If @error <> 0 then ExitLoop
    IniWrite(".\regvalues.ini", "Families", $i, $family)
    $var = IniRead(".\regvalues.ini", "Families", $i, "not found")
    $var1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Garmin\Mapsource\Families\"&$var, "ID")
    IniWrite(".\regvalues.ini", "Family IDs Hex", $i, $var1)
    $var3 = IniRead(".\regvalues.ini", "Family IDs Hex", $i, "not found")
    $binary = $var3
    IniWrite(".\regvalues.ini", "Family IDs Int", $i, Int(_BinaryReverse($binary)))

    Next

    Func _BinaryReverse($sBinary)
    Local $sBinaryHelp
    For $a = 1 To BinaryLen($sBinary) / 2
    $sBinaryHelp &= StringTrimLeft(BinaryMid($sBinary, $a, 1),2)
    Next
    Return '0x' & $sBinaryHelp
    EndFunc

    [/autoit]
  • Der Fehler liegt wohl hier, aber leider habe ich keine Ahnung, wie ich diesen behebe:

    [autoit]

    $var3 = IniRead(".\regvalues.ini", "Family IDs Hex", $i, "not found")

    [/autoit]


    Der Hex-Wert, der durch IniRead geliefert wird, wird offenbar falsch interpretiert.

  • Bitboy
    Programme, die auf den Schlüssel zugreifen, brauchen einen Hex-Wert.
    Die reg-Datei wird außerdem von einem anderen Programm erstellt.

    Ich erkläre einfach mal, was eigentlich passieren soll:
    In meinem Script steht eine Eingabe zur Verfügung (GuiCtrlCreateInput). Dort soll einen 4-stellige Zahl eingetragen werden. Diese Zahl wird dann so verwurtstet, dass sie in der Registry unter o.g. Schlüssel steht. (Bis hierhin funktioniert alles). Das wäre noch zu erledigen: Da diese 4-stellige Zahl nicht doppelt vorkommen darf, soll der User darauf hingewiesen werden, dass die Zahl bereits verwendet wurde. Dazu ist es notwendig, die Registry auszulesen.

    Noch besser wäre es:
    Wenn mein Script (ohne User Eingabe) prüft, welche 4-stelligen Zahlen berits vergeben wurden (Registry auslesen) und dann automatisch eine zufällige noch nicht vergebene 4-stellige Zahl verwendet.

  • Also, in 3.3.0.0 kann man auch Binäre Variablen verketten, der Umweg über einen String entfällt:

    [autoit]


    Func _ReverseByteOrder($Binary)
    ; Prog@ndy
    Local $BinaryTemp = Binary(""), $wasNum=IsNumber($Binary)
    For $i = BinaryLen($Binary) To 1 Step -1
    $BinaryTemp &= BinaryMid($Binary,$i,1)
    Next
    If $wasNum Then Return Number($BinaryTemp)
    Return $BinaryTemp
    EndFunc

    [/autoit]
  • Ich habe keine Ahnung, wie ich das in mein Script (siehe oben) integrieren kann.
    Ich bekomme es einfach nicht zum Laufen, zumindest nicht so, dass die richtigen Werte ausgegeben werden.

    So sieht übrigens die ini aus, aus der die Werte ausgelesen werden sollen:
    [Family IDs Hex]
    1=0x2FF2
    2=0x4E04
    3=0xD204
    4=0x2805
    5=0xC712
    6=0xD412
    7=0xBC02
    8=0x2203
    9=0x0803
    10=0x5201