Dateibetrachter

Anfängerfragen zum Programmieren mit PureBasic.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Dateibetrachter

Beitrag von walter741 »

Guten Abend

Der Dateibetrachter öffnet alle möglichen Dateien
und zeigt sie auch an.
Von was ist es abhängig, das er eine Datei als HEX-Dump
anzeigt. Eine Datei mit der Endung *.db zeigt er als HEX-Dump an.
Erzeuge ich selbst eine Datei mit nicht Darstellbaren Zeichen
(zB $80 $20 $02 $FF) so zeigt er sie mir als Text an.
Das kann man natürlich nicht lesen.
Habe auch verschidene Endungen getestet. *.txt; *.abc; *.db
Leider ohne Erfolg!

Kann man dem Dateibetrachter zur Anzeige eines HEX Dumps zwingen?
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

Hallo

Habe folgenden Code:

Code: Alles auswählen

OpenFile(0,"C:\Test.db")
WriteString(0, Chr($80)+Chr($20)+Chr($01)+Chr($25)+Chr($FF)+Chr($01)+Chr($12))
CloseFile(0)
Er öffnet eine Datei und schreibt die paar Zeichen hinein. Alles OK
Ändere ich in der Mitte einen Hex Wert auf $00, dann fehlen
alle folgenden Zeichen in der Datei.

Was mache ich jetzt schon wieder falsch ?

Das ist auch der Grund, für meine vorige Frage! Brauche eine
Ansicht des Hex Dumps einer Datei.

Danke an alle

( Habe hier PB 4.20 und XP)
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Wenn du Nullbytes schreiben willst, musst du das per WriteData machen.

Ein Nullbyte signalisiert das Ende eines Strings.
Wenn du nun per Writestring() irgendwo in der Mitte ein Chr(0), also ein Nullbyte, reinfummelst, sieht die Procedure Writestring() dein tatsächliches Ende des Strings nicht mehr.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

HeXOR

Habe es getestet mit folgenden Code aus der Hilfe:

Code: Alles auswählen

  *MemoryID = AllocateMemory(1000)       ; reservieren eines Speicherblocks
  If *MemoryID
    PokeS(*MemoryID, Chr($80)+Chr($20)+Chr($00)+Chr($25)+Chr($FF)+Chr($01)+Chr($12))   ; wir schreiben einen String in den Speicherblock
  EndIf
  If CreateFile(0, "C:\Test.db")           ; wir erstellen eine neue Text-Datei...
    WriteData(0, *MemoryID, 10)          ; die ersten 10 Zeichen des Speicherblocks in die Datei schreiben
    CloseFile(0)                         ; die zuvor geöffnete Datei schließen und damit die geschriebenen Daten endgültig speichern
  Else
    Debug "Konnte die Datei nicht erstellen!"
  EndIf
Leider ist auch hier nach dem Ersten Chr($00) Schluss.
Alle Zeichen nach dem Ersten gewollten 00 sind auch 00.

Oder habe ich etwas falsch gemacht?

lg Walter
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wie HeXOR sagte, eine NULL beendet einen String.

also, wenn du an eine Stringfunktion eine bytefolge übergibst, die mittendrin eine NULL hat,
dann wird die Stringfunktion völlig folgerichtig an dieser Stelle die Verarbeitung beenden.

ob diese Stringfunktion auf die Platte oder in den Speicher schreibt,
oder die Länge misst oder einen Teil sucht ist dabei unerheblich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

Was bedeutet das?

Wie schreibe ich richtig Daten in eine Datei?
(also B0 00 00 17 A9 2B, oder so ähnlich)

mfg Walter
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Entweder mit PokeB(), PokeW(), ...
oder in der Art:

Code: Alles auswählen

If CreateFile(0, "C:\Test.db")
  WriteData(0, ?StartHere, ?StopHere - ?StartHere)
  CloseFile(0)
EndIf 
End

DataSection
	StartHere:
	Data.b $80, $20, $00, $25, $FF, $01, $12
	StopHere:
EndDataSection
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

Hallo

Ja, das ist es.

Ähhh aber das mit dem

Code: Alles auswählen

?StartHere, ?StopHere - ?StartHere
verstehe ich nicht.

Falls es nicht zuviel verlangt ist, könntest Du Bitte das eine
oder andere Wort noch dazu spenden.

Vielen Dank Walter
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Schau mal hier, den letzten Abschnitt an.
(Das selbe steht auch in deiner Hilfe)
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag von walter741 »

Vielen Dank für Eure Hilfe

Walter
Antworten