Ansicht
Dokumentation

ABAPSHEET_BITS_AND_BYTES - SHEET BITS AND BYTES

ABAPSHEET_BITS_AND_BYTES - SHEET BITS AND BYTES

Addresses (Business Address Services)   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Ein Exkurs in Bits und Bytes

Dieser Spickzettel führt Sie in den technischen Hintergrund von Datentypen und Datenobjekten ein. Sie kann für ein besseres Verständnis der Behandlung von Daten in ABAP hilfreich sein, einschließlich eines Überblicks über Casting und Konvertierungen.

Nach seiner Deklaration ist ein Datenobjekt in seinem Kontext (Prozedur, Klasse, Programm) typgerecht verwendbar. Beispielsweise kann einem numerischen Datenobjekt das Ergebnis einer Berechnung zugewiesen werden:

Nach dieser Zuweisung enthält das Datenobjekt num den berechneten Wert 3604530, der auch entsprechend mit einer typgerechten Ausgabe wie z.B. Cl_demo_output=>display dargestellt wird. Dasselbe gilt natürlich auch für die Anzeige der Variablen beim Setzen eines Breakpoints bei der letzten Anweisung im ABAP Debugger.

Der ABAP Debugger zeigt auch den hexadezimalen Wert 32003700 des Datenobjekts. Dies stellt direkt den Binärwert 0011 0010 0000 0000 0011 0111 0000 0000 dar, der in den vier Bytes gespeichert ist, die der 4-Byte-Integer-Zahl im Speicher zugeordnet sind. Dieser Wert ist plattformabhängig und für numerische Typen durch die Bytereihenfolge definiert, wobei entweder das höchstwertige (Big Endian) oder das niedrigstwertige (Little Endian) Byte an die erste Speicherposition geschrieben wird. Der hier gezeigte Dezimalwert des Hexadezimalwerts 32003700 wäre 838874880 und ist nicht der ganzzahlige Wert 3604530, den ABAP behandelt. Dies zeigt die Bedeutung von Datentypen. Ein Datenobjekt ist eine an seiner Adresse im Speicher abgelegte Folge von Bytes, die vom ABAP-Laufzeit-Framework entsprechend dem Datentyp interpretiert wird. Der Hexadezimalwert ist für den Programmierer in den meisten Fällen irrelevant.

Betrachten wir nun ein zeichenartiges Feldtext mit einer Länge von zwei Zeichen:

Diesem Feld kann wie gezeigt das Ergebnis einer Zeichenkettenoperation zugewiesen werden und das durch cl_demo_output=>display sowie im ABAP Debugger gezeigte Ergebnis ist die Zeichenkette 27. Auch hier ist es der Datentyp, der den Wert 27 aus dem tatsächlichen Hexadezimalinhalt ableitet, der wie im vorherigen Beispiel 32003700 ist. In diesem Fall ist 32003700 die Kodierung der Zeichenkette 27 in der Unicode-Zeichendarstellung UCS-2, die von ABAP in Unicode-Systemen unterstützt wird. Die Unicode-Zeichendarstellung hängt auch von der plattformabhängigen Bytereihenfolge ab.

Nur bei einem byteartigen Datentyp entspricht der von ABAP interpretierte Wert direkt dem Hexadezimalinhalt. Die folgenden Zeilen modifizieren die Bits einer Bytekette mit einer Bit-Operation:

Dabei ist die Ausgabe mit cl_demo_output=>display, die Wertanzeige des ABAP Debuggers sowie der hexadezimale Wert gleich, nämlich 32003700.

In den obigen Beispielen wurden drei Datenobjekte vorgestellt, die alle vier Byte im Speicher belegen, die die gleichen Binärwerte haben, aber aufgrund ihres Datentyps von ABAP unterschiedlich behandelt werden. Der Datentyp ist auch dafür verantwortlich, dass verschiedene Arten von Operationen (numerische Berechnung, Stringverkettung, Bit-Operation) auf die entsprechenden Datenobjekte angewendet werden können. Anhand dieser Beispiele können wir uns nun die grundlegenden Konzepte des Castings und der Typkonvertierung sowie deren Beziehung zu Bits und Bytes ansehen.

Der Begriff Casting bedeutet in ABAP nichts anderes, als ein Datenobjekt nach einem anderen Datentyp zu behandeln, als dem, der ihm fest zugeordnet ist. Dies kann über Feldsymbole geschehen, mit denen ein neuer (symbolischer) Name und ein neuer Typ für den Speicherbereich eines Datenobjekts definiert werden können. Beim Zugriff auf den Speicherbereich über ein Feldsymbol wird dieser je nach Typ des Feldsymbols behandelt. Die folgende Zeilen zeigen ein Beispiel.

Bei der Bitfolge in hex erfolgt beim Zugriff über den Namen <num> ein Cast in ein numerisches Feld und beim Zugriff über den Namen <text> ein Cast in ein Textfeld. Die Ausgaben sind 32003700, 3604530 und 27, was die Wirkung des Datentyps auf die Behandlung desselben hexadezimalen Inhalts deutlich zeigt.

Im Gegensatz dazu wird bei einer Typkonvertierung (kurz Konvertierung) der tatsächliche binäre Inhalt eines Datenobjekts so konvertiert, dass er zu einem anderen Datentyp passt. Typkonvertierungen finden in der Regel bei Zuweisungen zwischen Datenobjekten verschiedener Datentypen statt. Ziel einer solchen Konvertierung ist es, die typspezifische Bedeutung des Inhalts im Quellfeld so weit wie möglich für den Datentyp des Zielfelds zu erhalten. Zu diesem Zweck enthält ABAP einen großen Satz von Konvertierungsregeln. Hier ein einfaches Beispiel:

Wir weisen das zeichenartige Feld text dem numerischen Feld num zu und zeigen das Ergebnis an, das auch im ABAP Debugger überprüft werden kann. Das ABAP-Laufzeit-Framework erkennt, dass die Zeichenkette 27 im Text als ganzzahlige Zahl 27 interpretiert werden kann, erzeugt den hexadezimalen Wert 1B000000, in dem diese Zahl für den numerischen Typ von num kodiert ist, und weist sie dem Speicherort von num zu. Somit erfolgt die eigentliche Konvertierung für den ursprünglichen hexadezimalen Inhalt 32003700 von text in den neuen hexadezimalen Inhalt 1B000000 von num. Bei Zeichenketten in Textfeldern, für die keine solche sinnvolle Konvertierung möglich ist, kommt es zu einer Ausnahme. Mit den Feldsymbolen <hex_text> und <hex_num> werden die hexadezimalen Inhalte der Felder text und num durch Casting in einen byteartigen Typ gezeigt.

Hinweis

Aus Gründen der Einfachheit ist dieser Spickzettel auf benannte elementare Variablen beschränkt. Insbesondere für Literale, die intern so behandelt werden, als wären sie Konstanten des dem Literal zugeordneten Datentyps, gilt das Gleiche. Im vorherigen Beispiel kann text durch ein Literal '27' ersetzt werden, das die gleichen Ergebnisse liefert.






CPI1466 during Backup   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8561 Date: 20240523 Time: 140902     sap01-206 ( 147 ms )