Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hexwerte in eine Datei schreiben... (https://www.delphipraxis.net/29405-hexwerte-eine-datei-schreiben.html)

BenTech 8. Sep 2004 19:24


Hexwerte in eine Datei schreiben...
 
Hallo,
ich schreibe gerade eine Komponente, mit der sich der ID3v2 Tag einer Mp3 Datei manipulieren lässt.
Der Tag besteht aus einzelnen Frames, in denen die Informationen gespeichert sind.
Nun zu meinem Problem:
Am Anfang eines jeden Frames wird die Länge des Frames (in Byte) angegeben.
Ich finde aber einfach keine Möglichkeit diese Information in die Datei zu schreiben.

Folgendermaßen sieht der Quelltext aus (am Beispiel des APIC Frames für das CD Cover):
Code:
procedure SchreibeFrameHeaderAPIC;
var buf    : PByteArray;
    imgSize : Integer;
    imgHex : String;
begin
 GetMem(buf,4);
 imgSize := FileSize(coverimg);
 imgHex := IntToHex(imgSize);
 ...
 BlockWrite(mp3file,buf^,4);
 FreeMem(Buf);
end;
Ich habe den Code etwas vereinfacht, damit er übersichtlich bleibt :).
"..." markiert die Stelle, an der mein Problem liegt.
Der String "imgHex" sieht beispielsweise so aus: $00001997
Ich habe jetzt nur keinen blassen schimmer, wie ich das in den Puffer schreiben soll, da ich keine Funktion in Delphi gefunden habe, mit der sich so etwas machen lässt.
Kann mir eventuell jemand helfen. Vielen Dank schonmal :)

fiasko 8. Sep 2004 22:26

Re: Hexwerte in eine Datei schreiben...
 
Du könntest das mit BlockWrite(mp3file,imgHex[1],length(imgHex)); in die Datei schreiben.

Du willst auch sicher die Zahl als Zeichenkette und nicht direkt als Bytes speichern???

Ich hab davon keine Ahnung von dem MP3-Tag-Zeugs, aber mit 4 Ziffern kommt man nur auf 0xFFFF == 64KByte (und das ist irgendwie wenig)!

BenTech 8. Sep 2004 22:39

Re: Hexwerte in eine Datei schreiben...
 
Oh, tut mir leid. Da hab ich mich etwas missverständlich ausgedrückt.
Ich möchte es folgendermaßen in die Datei schreiben:
Code:
 buf[0] := $00;
 buf[1] := $00;
 buf[2] := $19;
 buf[3] := $97;
 BlockWrite(mp3file,buf^,4);
Nur weiß ich nicht, wie man das macht, wenn es sich um Variablen handelt.
Ich kann ja nicht $imgHex schreiben.

woki 8. Sep 2004 22:48

Re: Hexwerte in eine Datei schreiben...
 
hm ...

OH IntToHex (Funktion) vielleicht?

Grüsse
Woki

scp 8. Sep 2004 23:25

Re: Hexwerte in eine Datei schreiben...
 
Die grösse muss ja nicht in Hex, sondern binär gespeichert werden. Leider müssen vorher die Bytes umgedreht werden (Stichwort Bei Google suchenLittle Endian und Bei Google suchenBig Endian).
Delphi-Quellcode:
procedure SchreibeFrameHeaderAPIC;
var buf    : PByteArray;
    imgSize : Integer;
    imgHex : String;
begin
GetMem(buf,4);
imgSize := FileSize(coverimg);
ImgSize := ((ImgSize and $FF000000) shr 24) +
           ((ImgSize and $00FF0000) shr 8) +
           ((ImgSize and $0000FF00) shl 8) +
           ((ImgSize and $000000FF) shl 24) ;
CopyMemory(buf, @ImgSize, 4);
//...
BlockWrite(mp3file,buf^,4);
FreeMem(Buf);
end;

BenTech 9. Sep 2004 09:24

Re: Hexwerte in eine Datei schreiben...
 
Vielen Dank SCP!
Jetzt funktionierts. Ich hatte auch probiert, den Integer Wert direkt
in die Datei zu schreiben, hatte aber bemerkt, dass die Bytes falschrum gespeichert wurden.
Danke für die Hilfe :)

Muetze1 9. Sep 2004 09:27

Re: Hexwerte in eine Datei schreiben...
 
Moin!

Ansonsten kannst du dir diese Frame Header Geschichten bei neuen Problemen auch von meiner Lib abschauen die ja frei verfügbar ist auf meiner Homepage.

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.

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