Binär zu String

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Ja, dann kann ich dir auch nicht helfen, da gibt es den Key wohl nicht.
Kannst du ja mal mit dem Editor nachsehen.
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ja hab ich ja um auf den installedversion zu kommen.. weil mit binär udn so kann ich das auslesen (sioehe vorherige posts)
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Habe es vorhin noch mal editiert. Binary gibt eine Adresse zurück und nicht
den Inhalt. Wie das dann geht, am besten Beispiel ansehen, ist bei der Lib
dabei. In meinem System (was ich im Moment laufen habe) gibt es den Eintrag
InstalledVersion nicht (ME). Wohl aber bei XP und da ist es richtig mit Binary.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Hier mal ein Code, der unterschiedliche Arten der Binärrückgabe zeigt:

Code: Alles auswählen

; Testprogramm für Binary

testkey.s="TestBinary"
testbin.s="EinBinary"

; Font wird für das Fenster unten benötigt
#Font=0
LoadFont(#Font,"Arial",10)

; den Subkey erstellen
Debug JHRegCreateKey(#HKEY_CURRENT_USER,testkey)

; das Value erstellen und mit Werten belegen
Length.l = 32
Restore BinaryTest      ; Data
*MID = AllocateMemory(Length)
For a=0 To 31
  Read b
  PokeB(*MID+a,b)
Next a
If *MID; wenn ein gültiger Speicher festliegt
  Debug JHRegSetBinary(#HKEY_CURRENT_USER,testkey,testbin,Str(*MID),#False)
  FreeMemory(*MID)
EndIf

; Das binäre Value auslesen auf unterschiedliche Weise

; gibt einen HEX!!! String zurück mit dem Inhalt
Debug JHRegGetValue(#HKEY_CURRENT_USER,testkey,testbin)

; gibt die Adresse eines Speichers zurück, wo der Inhalt abgelegt wurde
; nachfolgende Verarbeitung wie man es braucht
*MID=JHRegGetBinary(#HKEY_CURRENT_USER,testkey,testbin)
If *MID
  For I = 0 To MemorySize(*MID)-1
    Debug PeekB(*MID + I) & $FF ; wegen signierter Variable!
  Next
  FreeMemory(*MID)
EndIf

; gibt ein Fenster aus, wo der Inhalt in Form eines Dump aufgelistet wird
; kann man benutzen wenn man nur sehen will was drin steht, nicht geeignet
; zu Weiterverarbeitung
JHRegGetBinaryDump(#HKEY_CURRENT_USER,testkey,testbin,#Font)

; den SubKey wieder entfernen
Debug JHRegDeleteKey(#HKEY_CURRENT_USER,testkey)

End

; Binary Test
DataSection
  BinaryTest:
  Data.l 77, 65, 68, 69,  0, 73, 78,  0
  Data.l 83, 65, 88, 79, 78, 89,  0,  0
  Data.l 67, 72, 69, 77, 78, 73, 84, 90
  Data.l  0,  0,  0,  0,  0,  0,  0,  0
EndDataSection
Noch ein Wort als Nachsatz:

1. es existiert eine chm Hilfe zur Lib (Cursor auf die Funktion und F1)
2. es gibt ein Beispielprogramm welches im Downloadpaket enthalten ist
3. an einer Stelle in der Hilfe steht anstelle <*MID> <MemAdr> und das noch ohne Pointer.
Das ist aber nur ein Test, ob es gemerkt wird :mrgreen: (nee, im Ernst ich habe mich verschrieben).
4. Das Leseverfahren gilt auch für bereits exisiterende Value, also auch
für InstalledVersion
5. man muß die Schreibweise einhalten wenn man ein Value lesen will,
auch Groß-/Kleinschreibung
6. Binary beinhalten nicht eine Klartextangabe, also 0 ist CHR( 0 ) = NUL
und nicht CHR( 48 ) = "0"
7. AllocateMemory() reserviert immer mindestes 12 Byte, warum das so ist
Fred fragen, mich stört es nicht

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Antworten