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 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?
Also einfach umwandeln, oder?
[autoit]$binary = 0x2FF2
[/autoit][autoit][/autoit][autoit]MsgBox(0,"String", BinaryToString($binary))
MsgBox(0,"Integer", $binary)
Was willst du damit jetzt machen?
das ist n hex wert =)
EDIT: warst wohl schneller xD
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.
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
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
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.
Versuch es doch mal als Dezimalzahl, dann hast du auch die Umrechnung gespart.
[HKEY_LOCAL_MACHINE\SOFTWARE\softwareabc\]
"ID"=dword:00001234
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
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