![]() |
Delphi-Version: 5
Daten-String in Array of Byte einlesen
Hallo,
ich hoffe ich drück mich richtig aus und verwechsel keine Fachbegriffe. Ich habe die Aufgabe, aus einer Text Datei mehrere Daten-Strings in ein Array of Byte "einzulesen" ein "Datenstring" besteht aus 64 Byte und sieht z.b. folgender maßen aus: 12450ABF43ED234DFAB39104365FFF221943AABEE04365FFF2 21943AABEEBEE04365FFF221 ich hab schon folgendes probiert aber komme irgendwie auf keinen grünen Zweig: 1. Versuch var i : Integer; sZeile : String; Daten : Array of Byte; . begin SL := TStringlist.Create; SL.LoadfromFile('.....'); for i := 0 to sl.Count-1 do begin sZeile := SL.Strings[i]; Daten[i] := StrToInt ('$'+sZeile); end; . . . . hier bekomme ich immer die Datei '12450ABF43ED234DFAB39104365FFF221943AABEE04365FFF 221943AABEEBEE04365FFF221' ist kein gütliger Integerwert ist. (egal ob ich mit oder ohne '$' schreib). |
AW: Daten-String in Array of Byte einlesen
Steht der String so in der Textdatei?
Denn was du machst ist die Datei Zeile für Zeile auslesen und nicht Zeichen für Zeichen. Und wenn du schonmal dabei bist Delphi zu lernen dann gewöhn dir diesen unsäglichen C-Stil ab und schieb das begin in die nächste Zeile. |
AW: Daten-String in Array of Byte einlesen
Ich weiß nicht ob es nur ein Formatierungsfehler hier im Forum ist, aber bei beiden Zeichenketten sehe ich ca. in der Mitt ein Leerzeichen. Das sollte da natürlich nicht sein. Am besten verwendest du noch
Delphi-Quellcode:
bevor du die Zeichenkette an die
Trim()
Delphi-Quellcode:
Funktion übergibst.
StrToInt()
Edit: Ich sehe gerade, dass du ein array of Byte verwendest. Dann wäre das Umwandeln der Zeichenkette natürlich unnötig. Zudem ist dieser Hex-Wert selbst für einen Int64 noch zu groß. |
AW: Daten-String in Array of Byte einlesen
Zitat:
Zitat:
|
AW: Daten-String in Array of Byte einlesen
@Die Dolly, ursprünglich ist das ganze ein S-Record File von Motorola. Aber Imprinzip ist es nichts anders als eine Textdatei, bei der "x"-Zeile untereinander stehen mit einem jeweiligen HEX-Code.
Sinn des ganzen wäre es diesen "Daten-String" in ein Array of Byte zu schreiben, da ich diese Daten Byte für Byte in ein Flash schreiben muss. Das mit dem beginn werde ich mir angewöhnen ;D @Aviator: Das Leerzeichen müsste ein Formatierungsfehler sein. In meiner Datei steht kein Leerzeichen. @Günther: So ist der Plan in meinem Kopf; ich lese das gesamte "Dokument" Zeile für Zeile ein, und "schiebe" jede Zeile in ein Array of Byte mit dem ich wieder weiterarbeiten kann. |
AW: Daten-String in Array of Byte einlesen
Zitat:
|
AW: Daten-String in Array of Byte einlesen
ich sag mal so,
Im Moment lese ich die Daten in eine Stringliste ein und arbeite damit weiter. Das funktioniert auch ohne großen Probleme. |
AW: Daten-String in Array of Byte einlesen
Wenn das ohne Probleme funktionieren würde, hättest du nicht hier um Hilfe gebeten :P
|
AW: Daten-String in Array of Byte einlesen
Wenn ich die Daten in eine Stringliste schreibe und mit dieser dann weiter arbeite funktioniert es.
Allerdings sind dann die Daten in einem "String". Wenn ich die Daten in eine Stringliste schreibe und die einzelnen Zeilen in ein Array of Byte packe funktioniert es nicht. Und deswegen versuche ich auch viel erstmal selbst zu lösen. Aber bis jetzt bin ich auf keinen grünen Zweig gekommen. Deswegen stell ich die Frage an was es liegen könnte. Ich hab auch schon die Firma Google gefragt und auch hier im Forum die Suchfunktion benutzt. Bisher ohne Erfolg. |
AW: Daten-String in Array of Byte einlesen
Zitat:
|
AW: Daten-String in Array of Byte einlesen
Nur dass ich das richtig verstanden habe, aus dem String '12450A' soll ein Array of Byte mit dem Inhalt (18, 69, 10) werden, stimmt das (ich weiß, Deine Strings sind länger, aber ich war zu faul)?
|
AW: Daten-String in Array of Byte einlesen
Wenn du den Stream von Hex entschlüsseln sollst: StrToInt('xA3') als Ansatz.
Wenn du den Stream unverändert ausgeben möchtest: ![]() ![]() |
AW: Daten-String in Array of Byte einlesen
TFile.ReadAllBytes(..) 😶
|
AW: Daten-String in Array of Byte einlesen
Also wenn du diesen String (mit Hex-Werten) in Bytes umwandeln möchtest, dann geht das so
Delphi-Quellcode:
Hier werden immer zwei Hexadezimal-Ziffern genommen und davon der Dezimal-Wert berechnet und dieser in dem Byte-Array gespeichert.
function DecodeHexStringToBytes(const AHexString: string): TBytes;
var byteIdx: Integer; Len: Integer; begin Len := AHexString.Length; if AHexString.Length mod 2 <> 0 then raise EArgumentException.Create('AHexString must contain even number of chars'); SetLength(Result, AHexString.Length div 2); for byteIdx := 0 to AHexString.Length div 2 - 1 do begin Result[byteIdx] := Byte.Parse('$' + AHexString.Substring(byteIdx * 2, 2)); end; end; BTW Dein Beispiel-String aus dem ersten Post beinhaltet 74 Zeichen und das ergibt dann 37 Bytes. |
AW: Daten-String in Array of Byte einlesen
@DeddyH: ja so sollte es am ende aussehen
@Günther: Tfile.ReadAllBytes(...) schreib ich dann in den Klammern den Pfad, in dem das File liegt? @Schockohase: Danke für den Code, ich probier ihn mal aus. |
AW: Daten-String in Array of Byte einlesen
|
AW: Daten-String in Array of Byte einlesen
Zitat:
|
AW: Daten-String in Array of Byte einlesen
Zitat:
(Natürlich hast du Recht) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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