[Gelöst]Pointer gibt Wert MSB/LSB vertauscht zurück

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Dr. Console
Beiträge: 8
Registriert: Mi 11. Mai 2016, 12:39
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Kontaktdaten:

[Gelöst]Pointer gibt Wert MSB/LSB vertauscht zurück

Beitrag von Dr. Console »

Nabend zusammen,

ich arbeite grade an einer Anwendung welche daten über die Serielle Schnittstelle bekommt und die dann weiter verarbeitet.
Hierbei nutzte ich einen Pointer vom Typ Word um bestimmte Datenteile aus einem ShortString zu extrahieren.
Nun Habe ich folgenden Shortstring im Speicher:

Code: Alles auswählen

007487F0: 08 aa f0 05 07 03 0c 08 e5 00 00 00 00 00 ...
unter der variable "Einzeile2"
und folgenden Code führe ich nun aus, mit dem Ziel das in meiner Zielvariable hinterher 030C steht:

Code: Alles auswählen

ptr_Haltezeit:= @einzeile2[5];
   Melder_Haltezeit:= ptr_Haltezeit^;

Das Ergebnis ist jedoch 0C03, sprich MSB und LSB vertauscht.
Kann mir jemand sagen woran dies liegt, bzw. wie man es umgehen kann?

NG
Dr. Console

[EDIT]: Hab die lösung gefunden, Hardware- und OS-abhängig werden Daten entweder bei Little Endian LSB-first oder bei Big Endian MSB-First abgespeichert.
Die entsprechenden Fuktionen zur konvertierung sind NtoBE / BEtoN für default zu Big Endian oder LEtoN / NtoLE.
Mehr Infos hier: http://wiki.freepascal.org/Writing_portable_code_regarding_the_processor_architecture

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [Gelöst]Pointer gibt Wert MSB/LSB vertauscht zurück

Beitrag von Mathias »

Mit so etwas habe ich auch mal die Zähne fast ausgebissen.
Ich hatte mit Lazarus(PC) eine Vertex-Array mit Single gespeichert,
Da wollte ich die Daten auf einem Android-Gerät wieder einlesen, da war die Byte-Folge auch verdreht.
Da ich aber ein Neuling in Java war, habe ich natürlich alles andere vermutet.
Das es so etwas wie Little Endian LSB-first und Big Endian MSB-First gibt, habe ich nicht mal gewusst. :oops:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten