Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wo kommt die $33 her? (https://www.delphipraxis.net/127488-wo-kommt-die-%2433-her.html)

Carsten1234 14. Jan 2009 11:27


Wo kommt die $33 her?
 
Hallo zusammen,

ein aktuelles Datum soll (ohne den Punkt dazwischen) nach HEX konvertiert und in eine Textdatei geschrieben werden.
Im ersten Schritt wird das aktuelle Datum in einen String transferiert mit
Delphi-Quellcode:
var DTStr: string;
begin
DateTimeToString(DTStr, 'ddmmyyyyhhmmss', Now)
Im zweiten Schritt erfolgt die Umwandlung nach Hex via
Delphi-Quellcode:
DTStr:= StrToHex(DTStr);
und im letzten Schritt wird DTStr in eine Textdatei geschrieben
Delphi-Quellcode:
{$I-}
  System.AssignFile(FOut, FILENAME);
  System.Rewrite(FOut);
{$I+}
  if System.IOResult = 0 then
  begin
    System.Writeln(FOut, DTStr);
    System.CloseFile(FOut);
  end;
Ausgehend vom heutigen Datum (14.01.2009) sehe ich in der Datei, wenn ich sie mit einem Texteditor öffne (Windows Editor, TextPad, MED) die Zeile:

3134303132303039
Besser lesbar:
31 34 30 31 32 30 30 39

Passt.
Schaue ich mir hingegen die Inhalt der Textdatei mit einem Hex-Editor (HexEdit) an, sehe ich dort:

33313334333033313332333033303339
Besser lesbar:
33 31 33 34 33 30 33 31 33 32 33 30 33 30 33 39

Fragen:
1) Woher kommt immer diese 33?
2) Kann man das "Dazwischenschreiben" der 33 unterbinden?

Dank vorab und Gruß, Carsten

nahpets 14. Jan 2009 11:35

Re: Wo kommt die $33 her?
 
Hallo,

das sieht mir erstmal so aus, als würde das Unicode geschrieben. Jedes Zeichen belegt vier Byte?

nuclearping 14. Jan 2009 11:47

Re: Wo kommt die $33 her?
 
Warum konvertierst du das Datum in einen String, um es zu speichern?

Reinhard Kern 14. Jan 2009 11:48

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von Carsten1234
Hallo zusammen,
Ausgehend vom heutigen Datum (14.01.2009) sehe ich in der Datei, wenn ich sie mit einem Texteditor öffne (Windows Editor, TextPad, MED) die Zeile:

3134303132303039
Besser lesbar:
31 34 30 31 32 30 30 39

Passt.
Schaue ich mir hingegen die Inhalt der Textdatei mit einem Hex-Editor (HexEdit) an, sehe ich dort:

33313334333033313332333033303339
Besser lesbar:
33 31 33 34 33 30 33 31 33 32 33 30 33 30 33 39

Fragen:
1) Woher kommt immer diese 33?
2) Kann man das "Dazwischenschreiben" der 33 unterbinden?

Dank vorab und Gruß, Carsten

Hallo,

ganz einfach:

ASCII-Code für "3" ist hex 33 (für "4" hex 34 usw.). Also belegt eine "3" im Text in der Datei ein Byte mit hex 33 (in Delphi $33). Ist schon seit 50 Jahren so und hat mit Unicode nix zu tun.

Also:
Delphi-Quellcode:
Besser lesbar:
ASCII hex   33 31 33 34 33 30 33 31 33 32 33 30 33 30 33 39 
Text         3  1  3  4  3  0  3  1  3  2  3  0  3  0  3  9
Wenn du Dateien hex lesen willst, brauchst du eine ASCII-Tabelle, aber die meisten Hex-Editoren zeigen alternativ ASCII-Text an.

Gruss Reinhard

Edit: Scheissfont - geändert in Code zur Tabellierung

generic 14. Jan 2009 11:50

Re: Wo kommt die $33 her?
 
wenn du strtohex verwendest werden die binär information

31 34 30 31 32 30 30 39

^- hexcodes vom string: 14012009

in Zahlen um gewandelt. was du in deinen hexeditor siehts ist genau die ascii code welche das oben ergeben.

33 31 33 34 33 30 33 31 33 32 33 30 33 30 33 39

ist in string Darstellung:
3 1 3 4 3 0 3 1 3 2 3 0 3 0 3 9

also alles so wie es sein sollte bzw wie du es programmiert hast.

vieleicht erklärst du uns nochmal dein ziel.
was möchtest du mit der hex zahl erreichen?

Carsten1234 14. Jan 2009 11:58

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von generic
vieleicht erklärst du uns nochmal dein ziel.
was möchtest du mit der hex zahl erreichen?

Der Wunsch eines Firmwareentwicklers auf der Gegenseite ist, dass in der Textdatei lediglich
3134303132303039
Wie könnte ich das - wenn überhaupt - erreichen?

Gruß, Carsten

xaromz 14. Jan 2009 12:06

Re: Wo kommt die $33 her?
 
Hallo,
Zitat:

Zitat von Carsten1234
Wie könnte ich das - wenn überhaupt - erreichen?

indem Du einfach den String in die Datei schreibst, ohne in vorher nach Hex zu wandeln.

Gruß
xaromz

Uwe Raabe 14. Jan 2009 12:10

Re: Wo kommt die $33 her?
 
Dein Formatstring passt nicht!

Delphi-Quellcode:
DateTimeToString(DTStr, 'ddmmyyyyhhmmss', Now)
muss heißen

Delphi-Quellcode:
DateTimeToString(DTStr, 'ddmmyyyyhhnnss', Now)
Die Minuten werden mit n bzw. nn angesprochen, mm ist schon für den Monat reserviert.

Carsten1234 14. Jan 2009 12:14

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von xaromz
Hallo,
indem Du einfach den String in die Datei schreibst, ohne in vorher nach Hex zu wandeln.


:wall: :wall: :wall:

DeddyH 14. Jan 2009 12:15

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von Uwe Raabe
Die Minuten werden mit n bzw. nn angesprochen, mm ist schon für den Monat reserviert.

Nicht ganz ;)
Zitat:

Zitat von Delphi 5-Hilfe
mm
Zeigt den Monat als Zahl mit führender Null an (01-12). Folgt der Bezeichner mm direkt nach der Angabe h oder hh, wird statt des Monats die Minute angezeigt.

Sicherheitshalber würde ich aber auch nn verwenden, das ist auf jeden Fall eindeutig.

himitsu 14. Jan 2009 12:16

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von Carsten1234
Der Wunsch eines Firmwareentwicklers auf der Gegenseite ist, dass in der Textdatei lediglich
3134303132303039

Zitat:

Zitat von xaromz
indem Du einfach den String in die Datei schreibst, ohne in vorher nach Hex zu wandeln.

oder will derEntwickler es Binär haben :gruebel:

wie dem Auch sei, entweder ist das im Ausgangspost richtig, oder dieses hier
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var DTStr: string;
    FOut: TextFile;

  begin
    DateTimeToString(DTStr, 'ddmmyyyyhhmmss', Now);
    System.AssignFile(FOut, 'test.txt');
    System.Rewrite(FOut);
    if System.IOResult = 0 then
    begin
      System.Writeln(FOut, DTStr);
      System.CloseFile(FOut);
    end;
PS: das 33313334333033313332333033303339 im Ausgangspost ist die Hexadezimale Darstellung der Hexadezimalen Dastellung des Datumsstrings.
schau dir die datei doch mal mit einem Texteditor an und nicht mit 'nem Hexeditor
Code:
33313334333033313332333033303339
 3 1 3 4 3 0 3 1 3 2 3 0 3 0 3 9

3134303132303039
 1 4 0 1 2 0 0 9

14012009

Carsten1234 14. Jan 2009 12:17

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von Uwe Raabe
Dein Formatstring passt nicht!

Tüpselfehler meinerseits hier im Beitrag, trotzdem aber Danke für den Hinweis.

Gruß, Carsten

Carsten1234 14. Jan 2009 12:19

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von himitsu
oder will derEntwickler es Binär haben :gruebel:

Passt (ihm) jetzt so wie es ist. :hello:

joachimd 14. Jan 2009 13:39

Re: Wo kommt die $33 her?
 
Zitat:

Zitat von Carsten1234
Zitat:

Zitat von himitsu
oder will derEntwickler es Binär haben :gruebel:

Passt (ihm) jetzt so wie es ist. :hello:

nur der Vollständigkeit halber:
ES IST IMMER BINÄR - COMPUTER KÖNNEN NIX ANDERES!!!
Kommt nur darauf an, wie man es interpretiert;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz