![]() |
Zahl aus TMemoryStream in Integer einlesen
Ich schreibe an einem Programm um Firmware auf Echtheit zu prüfen.
In der Firmwaredatei ist u.a. die Größe der Datei als Prüfwert abgelegt... Nun habe ich allerdings ein kleines Problem beim einlesen dieses Wertes: In der Datei steht der wert wie folgt:
Code:
Ich habe folgende Funktion zum Auslesen:
HEX: xx xx xx xx xx 11 22 33 44 yy yy yy
(fsFirmware ist vom Typ TMemoryStream)
Delphi-Quellcode:
Als Ergebnis bekomme ich allerdings nicht die Dateigröße, sondern eine Zahl, die dem gespiegeltem HEX-Wert entspricht!
function TFirmware.GetstoredSize: Integer;
var buffer: integer; begin fsFirmware.Position := 12; fsFirmware.ReadBuffer(Buffer,SizeOf(buffer)); result := buffer; end;
Code:
Was mache ich falsch?
HEX erwartet: 11 22 33 44
HEX Ergebnis: 44 33 22 11 |
Re: Zahl aus TMemoryStream in Integer einlesen
Hallo,
noch machst du nichts falsch - du musst die Bytes nur noch umdrehen. Schau mal hier: ![]() Grüße vom marabu |
Re: Zahl aus TMemoryStream in Integer einlesen
Ich denke, du machst nichts falsch! Meines Wissens nach, werden die einzelnen Bytes einer Integer-Variable derart gespeichert, dass das höchstwertigste Byte als letztes kommt. (Bei einem Dezimal-Wert z.B. 10356 würde das dann so aussehen: 65301).
Versuch mal:
Delphi-Quellcode:
//Edit: Oops, zu langsam! Naja - trotzdem!
var
Wert: Longword; [...] Wert:=((Wert and $FF000000) ShR 24)+((Wert and $00FF0000) ShR 8)+((Wert and $0000FF00) ShL 8)+((Wert and $000000FF) ShL 24); |
Re: Zahl aus TMemoryStream in Integer einlesen
Vielen Dank!
Da hab ich ja an der völlig falschen Stelle den Fehler gesucht! Hatte schon vermutet, ich hätte einfach den falschen Typ genommen... Danke! Jetzt klappt's... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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