![]() |
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:
Ich habe den Code etwas vereinfacht, damit er übersichtlich bleibt :).
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; "..." 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 :) |
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)! |
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:
Nur weiß ich nicht, wie man das macht, wenn es sich um Variablen handelt.
buf[0] := $00;
buf[1] := $00; buf[2] := $19; buf[3] := $97; BlockWrite(mp3file,buf^,4); Ich kann ja nicht $imgHex schreiben. |
Re: Hexwerte in eine Datei schreiben...
hm ...
OH IntToHex (Funktion) vielleicht? Grüsse Woki |
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
![]() ![]()
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; |
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 :) |
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 22:56 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