CL_ABAP_CONV_IN_CE - Codepage- und Endian Konvertierung (Extern -> Systemformat)
ABAP Short Reference CPI1466 during BackupDiese Dokumentation steht unter dem Copyright der SAP AG.
Funktionalität
Instanzen der Klasse CL_ABAP_CONV_IN_CE ermöglichen die Konvertierung von Binärdatenin gültige ABAP Datenobjekte. (D.h. Daten in einem externen Format werden eingelesen in das Systemformat.)
Unterstützt werden die Konvertierung von Zeichensätzen (für Textdaten) und die Konvertierung der Bytereihenfolge (für numerische Daten).
Ferner gibt es statische Methoden, um aus einem hexadezimalen oder dezimalen Unicode-Wert ein einzelnes Zeichen in der aktuellen Codepage zu erzeugen. Dies sind die MethodenCL_ABAP_CONV_IN_CE=>UCCP undCL_ABAP_CONV_IN_CE=>UCCPI.
Beziehungen
- Konvertierung von ABAP Datenobjekten in ein externes Binärformat.
- Konvertierung von ABAP Datenobjekten zwischen zwei externen Binärformaten.
- Diverse Attribute und Methoden zu Zeichensätzen und Bytereihenfolge.
- Korrektur der Ausrichtung von Strukturen in Containern vom Typ C (oder STRING). Diese Korrektur istnotwendig, wenn ostasiatische Zeichen ("full-width" Zeichen in Chinesisch, Japanisch und Koreanisch)von einem nicht-Unicode-System in ein Unicode-System oder umgekehrt übertragen werden. Die Korrektur ist nicht notwendig, wenn die Methode CONVERT_STRUC dieser Klasse verwendet wird.
Beispiel
Im folgenden Beispiel werden Text von UTF-8 in die Systemcodepage und Zahlen aus der little-endian Darstellung in das Systemformat konvertiert.
DATA:
text(100) TYPE c,
int TYPE i,
buffer(4) TYPE x,
conv TYPE REF TO cl_abap_conv_in_ce.
conv = cl_abap_conv_in_ce=>create(
encoding = 'UTF-8'
endian = 'L' ).
buffer = '41424320'.
conv->convert(
EXPORTING input = buffer
IMPORTING data = text ).
buffer = '02010000'.
conv->convert(
EXPORTING input = buffer
IMPORTING data = int ).
Hier wird zunächst durch Aufruf der Methode CREATEeine Konvertiererinstanz angelegt. Als Parameter können die Quell-Codepage, die im Eingabepufferverwendete Bytereihenfolge und die Art der Fehlerbehandlung spezifiziert werden. Der Parameter endianist nur für die Typen DECFLOAT16, DECFLOAT34, F, I und INT2 von Bedeutung.
Nach den Aufrufen der Methode CONVERT enthält die Variable text den Inhalt"ABC" und die Variable int den Wert 258.
Details sind in der Dokumentation der jeweiligen Methoden erklärt.
Im folgenden Beispiel wird der Inhalt eines Binärstrings nach Konvertierung in einer Strukturabgelegt. Der Binärstring kann z.B. per RFC empfangen oder aus einer Datei gelesen worden sein. In diesem Beispiel hat der Binärstring das in einem Nicht-Unicode-System übliche Layout;deshalb rufen wir die Methode CREATE_LEGACY_VIEW. (Um das Layout in Unicode-Systemen zu bestimmen, gibt es die Methode CREATE_UNICODE16_VIEW.)
DATA:
BEGIN OF struc,
text(5) TYPE c,
int TYPE i,
END OF struc.
DATA:
buffer TYPE xstring,
conv TYPE REF TO cl_abap_conv_in_ce,
view TYPE REF TO cl_abap_view_offlen.
conv = cl_abap_conv_in_ce=>create(
encoding = '0120'
endian = 'B' ).
view = cl_abap_view_offlen=>create_legacy_view( struc ).
buffer = 'C18283F1F250505000010002'.
conv->convert_struc(
EXPORTING input = buffer
view = view
IMPORTING data = struc ).
Der Inhalt der Variablen buffer setzt sich zusammen aus
- 5 Bytes (hexadezimal "C18283F1F2"), welche den String "Abc12" in EBCDIC-Latin-1 (SAP-Zeichensatz '0120') repräsentieren
- einer Alignmentlücke von 3 Bytes; der Inhalt dieser Bytes ("505050") wird ignoriert
- 4 Bytes (hexadezimal "00010002"), die den Wert 65538 im big-endian Format repräsentieren.
Dieses Beispiel-Programm führt auf Unicode- wie auch Nicht-Unicode-Systemen zu folgendem Ergebnis:
- struc-text enthält die Zeichen "Abc12".
- struc-int enthält die Zahl 65538.
Die Klasse CL_ABAP_CONV_IN_CE besitzt einige weitere Methoden, die ein Stream-orientiertes Modellimplementieren: Die ABAP Datenobjekte werden sequentiell aus einem binären Eingabepuffer gelesen. Diese Methoden werden wie folgt verwendet:
- Eine Konvertiererinstanz wird angelegt, wobei als Parameter der Eingabepuffer (d.h. der Binärstring, welcher die zu lesenden Daten enthält) angegeben wird.
- Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Abarbeiten von Daten aus dem Eingabepuffer.
- Einzelne Attribute der Konvertiererinstanz können neu gesetzt werden. (Diese Methode dient insbesondere zum Aufsetzen auf einen neuen Eingabepuffer unter Beibehaltung der übrigen Attribute.)
Im folgenden Beispiel werden Text von UTF-8 in die Systemcodepage und Zahlen aus der little-endian Darstellung in das Systemformat konvertiert.
DATA:
text(100) TYPE C,
int TYPE I.
DATA:
buffer TYPE XSTRING,
conv TYPE REF TO cl_abap_conv_in_ce.
buffer = '4142432002010000'.
conv = cl_abap_conv_in_ce=>create(
encoding = 'UTF-8'
endian = 'L'
input = buffer ).
CALL METHOD conv->read(
EXPORTING n = 4
IMPORTING data = text ).
CALL METHOD conv->read(
IMPORTING data = int ).
Der Inhalt der Variablen buffer setzt sich zusammen aus 4 Bytes (hexadezimal "41424320"), welche den String"ABC" in UTF-8 repräsentieren und 4 Bytes (hexadezimal "02010000"), welche den Wert 258im little-endian Format repräsentieren. Diese Daten werden in die entsprechenden Werte im aktuellen Systemformat konvertiert:
- Die Variable text enthält nun die Zeichenfolge"ABC". (Man beachte, daß sich die Längenangabe n = 4 auf die Anzahl der zu konvertierenden Zeichen bezieht.)
- Die Variable int enthält nun den Wert 258.
Wenn die gewünschte Bytereihenfolge in dem alten vonTRANSLATE ... NUMBER FORMAT erwarteten Format (als N(4) Wert) vorliegt, kann wie folgt vorgegangen werden:
TYPE-POOLS: ABAP.
CLASS cl_abap_char_utilities DEFINITION LOAD.
DATA:
number_format(4) TYPE N VALUE '0101'.
DATA:
endian TYPE ABAP_ENDIAN,
buffer TYPE XSTRING,
conv TYPE REF TO cl_abap_conv_in_ce.
endian = cl_abap_char_utilities=>number_format_to_endian(
number_format
).
conv = cl_abap_conv_in_ce=>create(
encoding = 'UTF-8'
endian = endian
input = buffer
).
Im folgenden Beispiel wird der Inhalt eines Binärstrings nach Konvertierung in einer Struktur abgelegt.
DATA:
begin of struc,
text(5) TYPE C,
int TYPE I,
end of struc.
DATA:
buffer TYPE XSTRING,
conv TYPE REF TO cl_abap_conv_in_ce,
view TYPE REF TO cl_abap_view_offlen.
view = cl_abap_view_offlen=>create_legacy_view( struc ).
buffer = 'C18283F1F250505000010001'.
conv = cl_abap_conv_in_ce=>create(
encoding = '0120'
endian = 'B'
input = buffer ).
CALL METHOD conv->read(
EXPORTING view = view
IMPORTING data = struc ).
Der Inhalt der Variablen buffer setzt sich zusammen aus
- 5 Bytes (hexadezimal "C18283F1F2"), welche den String "Abc12" in EBCDIC-Latin-1 (SAP-Zeichensatz '0120') repräsentieren
- einer Alignmentlücke von 3 Bytes; der Inhalt dieser Bytes ("505050") wird ignoriert
- 4 Bytes (hexadezimal "00010001"), die den Wert 65537 im big-endian Format repräsentieren.
Dieses Beispiel-Programm führt auf Unicode- wie auch Nicht-Unicode-Systemen zu folgendem Ergebnis:
- struc-text enthält die Zeichen "Abc12".
- struc-int enthält die Zahl 65537.
Hinweise
Details sind in der Dokumentation der jeweiligen Methoden erklärt.
Weiterführende Informationen
Vendor Master (General Section) TXBHW - Original Tax Base Amount in Local Currency
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 13875 Date: 20120527 Time: 082837 triton ( 286 ms )






