![]() |
Integer lesen, wie in C
Hallo,
kann man in Delphi/Pascal einen Integer byte-weise auslesen, wie in C/C++ ? Beispiel: int[2] -> liest das 2te Byte aus dem Integer. Weiß jemand, wie man das machen könnte? Dankeschön für eure Unterstützung. |
Re: Integer lesen, wie in C
Zitat:
Ganz abgesehen davon dass der Index bei 0 beginnt (das zweite Byte wäre also Index 1)... Folgendes:
Code:
liefert einen Compiler Fehler.
int i;
unsigned char ZweitesByte=i[1]; Wenn du das hier meinst:
Code:
so lässt sich das zwar kompilieren, aber in ZweitesByte steht danach nicht das zweite Byte drinnen sondern das fünfte weil die Größe des Integers (4 Byte) mit der Indexnummer multipliziert wird! Integer hat aber nur 4 Byte, sodass das fünfte Byte irgendwas von deinem Programm ist, was eben danach im RAM steht.
int *i;
int zahl=5; i=&zahl; unsigned char ZweitesByte=i[1]; Willst du eine Zahl byteweise auslesen, so lässt sich das in C++ mit einem union lösen, das sowohl einen int-wert als auch ein Array von 4 char-Werten enthält. Möglicherweise gibts das in Delphi auch. (Bitte um Korrektur falls da irgendwas nicht stimmt ;) ) |
Re: Integer lesen, wie in C
In Delphi ginge das zum Bleistift so ;)
Delphi-Quellcode:
type
TByteFromInt = record case Byte of 0: (Int: Integer); 1: (Bytes: array[1..4] of Byte); end; |
Re: Integer lesen, wie in C
Weitere Möglichkeiten, um auf Teile einer Integer zuzugreifen:
Delphi-Quellcode:
Grüße vom marabu
var
i, j: integer; b: byte; pb: PByte; begin b := LoByte(HiWord(i)); for j := 0 to 3 do b := i shr (j * 8) and $FF; pb := @i; for j := 0 to 3 do begin b := pb^; Inc(pb); end; end; |
Re: Integer lesen, wie in C
@Tubos:
Stimmt ja. Ich kenn mich in C nicht aus, hab des nur mal gesehen. :stupid: @Dax: Dein Code sieht interessant aus, aber ich kann mit dem Case in einem Typ nix anfangen :? Ich werd's mal ausprobieren. Danke für die Codes |
Re: Integer lesen, wie in C
Zitat:
|
Re: Integer lesen, wie in C
Moin Sebastian,
zum Thema case in einem Record kannst Du mal in der Hilfe unter Varianten-Records nachschauen. |
Re: Integer lesen, wie in C
Oder so;
Delphi-Quellcode:
Oder, richtig 'dreckig'
Var
X : Integer; p : PByteArray; Begin p := @X; // p zeigt auf ein Byte-Array. @X ist die Adresse der Variablen X, also zeigt p auf X. // Zugriff auf die Bytes of X über p^[0]..p^[3].. Aber Achtung! Intel ist pervers! Achte auf die Reihenfolge der bytes.
Delphi-Quellcode:
Ein einfaches Typcasting sollte es auch tun, also sowas:
Var
X : Integer; B : Array [0..3] Of Byte absolute X; Begin // Delphi kompiliert das so, das B und X den gleichen Speicherbereich belegen. // Zugriff über B[0]..B[3]
Delphi-Quellcode:
Type
TIntAsBytes = Array [0..3] of Byte; Var X : Integer; Begin // Zugriff auf die Bytes von X über TIntAsBytes(X)[0] ... TIntAsBytes(X)[3] |
Re: Integer lesen, wie in C
boah, das ist natürlich nicht schlecht.
Wieder was gelernt, irgendwie wird mir diese Programmiersprache immer sympatischer. :love: |
Re: Integer lesen, wie in C
So hab das Prinzip verstanden.
Aber kann man das mit den Records auch mit einem AnsiString machen? Beispiel:
Delphi-Quellcode:
Record
case Byte of 0: (s: Ansistring); 1: ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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