Benutzer mit den meisten Antworten
In einer Binären Datei das nächste NUL finden / anstuern

Frage
-
Hallo zusammen,
Ich habe in einer MP3 Datei folgendes Problem.
Finden kann ich die TAG mit
PosDesTAG = Abfrage.IndexOf("TT2") TextBox10.Text = Microsoft.VisualBasic.Mid(Abfrage, PosDesTAG + 8, 15) ' Song
Ergebnis:
"Der Titel des Song" ' jedoch nur 15 Zeichen, weil ich ja nicht mehr auslese.
Die länge des TAG ist ja bei jedem Song unterschiedlich.
Nun endet jeder TAG mit einem NUL
Jetzt möchte ich aber nicht nur 15 Zeichen auslesen, sonder bis ans Ende.
Aber wie ermittel ich nun innerhalb des angegebenen TAG das nächte "NUL"
Die Startposition habe ich ja, nun müsste ich ab der Startposition ermitteln,
an welcher stelle nun das "NUL" steht ?
Ich hoffe ich habe micht verstänlich ausgedrückt !?
lieben dank
Bernd
Antworten
-
Hallo Bernd,
eine Nul ist zunächst auch nur ein Zeichen, dass Du mit Abfrage.IndexOf(ChrW(0)) oder ControlChars.NullChar findest.
Aus dem Stegreif getippt:
Dim tagStart As Integer = posDesTAG + 8 Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart) If tagLength = -1 Then tagLength = 15 else tagLength = tagLength - tagStart - 1 End If Dim tagText As String = Abfrage.Substring(tagStart, tagLength)
Beachte aber, dass Du hier mit Zeichenketten arbeitest, die in .NET immer Unicode sind.
Je nach Variante werden aber in der Datei unterschiedliche Zeichensätze verwendet,
wenn ich in die Wikipedia schaue. Wodurch es zu Fehlern kommen kann.
Sicherer kann es sein, zunächst mit einem Byte() Array zu arbeiten
und danach eine Konvertierung vorzunehmen.
Da es im Web reichlich Infos zu MP/ID3 gibt schau Dich da mal um.
Gruß Elmar- Als Antwort markiert Bernd Schlepütz Samstag, 16. Januar 2010 10:52
Alle Antworten
-
Hallo Bernd,
eine Nul ist zunächst auch nur ein Zeichen, dass Du mit Abfrage.IndexOf(ChrW(0)) oder ControlChars.NullChar findest.
Aus dem Stegreif getippt:
Dim tagStart As Integer = posDesTAG + 8 Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart) If tagLength = -1 Then tagLength = 15 else tagLength = tagLength - tagStart - 1 End If Dim tagText As String = Abfrage.Substring(tagStart, tagLength)
Beachte aber, dass Du hier mit Zeichenketten arbeitest, die in .NET immer Unicode sind.
Je nach Variante werden aber in der Datei unterschiedliche Zeichensätze verwendet,
wenn ich in die Wikipedia schaue. Wodurch es zu Fehlern kommen kann.
Sicherer kann es sein, zunächst mit einem Byte() Array zu arbeiten
und danach eine Konvertierung vorzunehmen.
Da es im Web reichlich Infos zu MP/ID3 gibt schau Dich da mal um.
Gruß Elmar- Als Antwort markiert Bernd Schlepütz Samstag, 16. Januar 2010 10:52
-
Hallo Elmar,
ja die ganzen Wikipedia und auch andere Seiten über ID3 TAG habe ich gelesen.
Ich komme auch eigentlich ganz gut vorran und vorallem klar.
Bei mir hapert es nur noch ein wenig am Wissenstand des programmieren.
ich habe deinen Code, der wie immer Funktioniert, als Funktion umgeschreiben.
Vilen dank
Bernd
Private Function DenTagTextErmitteln(ByVal tagStart As Integer) As String ' ' von Elmar Boye tagStart = PosDesTAG + 7 Dim tagLength As Integer = Abfrage.IndexOf(ControlChars.NullChar, tagStart) If tagLength = -1 Then tagLength = 30 Else tagLength = tagLength - tagStart End If Dim tagText As String = Abfrage.Substring(tagStart, tagLength) Return tagText