[ABAP] Zahlenwerte zw. Zahlensystemen konvertieren

* https://wiki.scn.sap.com/wiki/display/Snippets/Number+base+conversion+in+ABAP
TRY.
* 1010 -> 10
    WRITE: / |Bin -> Base10: { /ui2/cl_number=>base_converter( number = '1010' from = 2 to = 10 ) }|.
* 10 -> 1010
    WRITE: / |Base10 -> Bin: { /ui2/cl_number=>base_converter( number = '10' from = 10 to = 2 ) }|.

  CATCH cx_sy_move_cast_error INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[ABAP] Unicode Codepoint in Char wandeln

* Unicode Codepoint (UCCP) als 4Char-Hex in Char (akt. Codepage) wandeln
TRY.
    DATA: lv_uccp_c4 TYPE char4 VALUE '0041'.
    WRITE: / cl_abap_conv_in_ce=>uccp( lv_uccp_c4 ).
  CATCH cx_root.
ENDTRY.

TRY.
    DATA: lv_uccp_x2 TYPE x LENGTH 2.
    lv_uccp_x2 = '0042'.
    WRITE: / cl_abap_conv_in_ce=>uccp( lv_uccp_x2 ).
  CATCH cx_root.
ENDTRY.

* Unicode Codepoint (UCCPI) als Integer in Char (akt. Codepage) wandeln
TRY.
    DATA: lv_uccpi TYPE i VALUE 65.
    WRITE: / cl_abap_conv_in_ce=>uccpi( lv_uccpi ).
  CATCH cx_root.
ENDTRY.

Weiterführende Infos: Link

[ABAP] Hilfsklasse für Enumeratoren auf Basis von statischen Objektreferenzen

* Klassenobjekte sind nur statisch verfügbar (CLASS-DATA)
* von ihr kann nicht abgeleitet werden (FINAL)
* mit NEW können keine Objektreferenzen erzeugt werden (CREATE PRIVATE)
CLASS lcl_enum_colors DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
* Konstanten vom Typ des Parameters
    CLASS-DATA: co_red TYPE REF TO lcl_enum_colors READ-ONLY.
    CLASS-DATA: co_green TYPE REF TO lcl_enum_colors READ-ONLY.
    CLASS-DATA: co_blue TYPE REF TO lcl_enum_colors READ-ONLY.

* Klassenkonstruktor
    CLASS-METHODS:
      class_constructor.
ENDCLASS.

CLASS lcl_enum_colors IMPLEMENTATION.
* Vorbelegung der Konstanten
* wird immer beim allerersten Aufruf eines Klassenelementes (Funktion, Variable, Konstante ...) ausgeführt
  METHOD class_constructor.
    co_red   = NEW #( ).
    co_green = NEW #( ).
    co_blue  = NEW #( ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Variablen vom Typ REF TO lcl_enum_colors
  DATA: lv_color_green TYPE REF TO lcl_enum_colors.
  DATA: lv_color_red TYPE REF TO lcl_enum_colors.
  DATA: lv_color_blue TYPE REF TO lcl_enum_colors.

* Variablen mit konstanten Werten vorbelegen
  lv_color_green = lcl_enum_colors=>co_green.
  lv_color_red = lcl_enum_colors=>co_red.
  lv_color_blue = lcl_enum_colors=>co_blue.

* Werteausgabe
  IF lv_color_green = lcl_enum_colors=>co_green.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lv_color_green = lcl_enum_colors=>co_red.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lcl_enum_colors=>co_red = lcl_enum_colors=>co_blue.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

[ABAP] Hilfsklasse für Enumeratoren auf Basis von Named Parameters

CLASS lcl_enum_colors DEFINITION FINAL.
  PUBLIC SECTION.
* Parametertyp
    TYPES: BEGIN OF ty_col_enum,
             col_name TYPE string,
             value    TYPE i,
           END OF ty_col_enum.

* Konstanten vom Typ des Parameters
    CLASS-DATA: co_red TYPE ty_col_enum READ-ONLY.
    CLASS-DATA: co_green TYPE ty_col_enum READ-ONLY.
    CLASS-DATA: co_blue TYPE ty_col_enum READ-ONLY.

* Klassenkonstruktor
    CLASS-METHODS:
      class_constructor.
ENDCLASS.

CLASS lcl_enum_colors IMPLEMENTATION.
* Vorbelegung der Konstanten
* wird immer beim allerersten Aufruf eines Klassenelementes (Funktion, Variable, Konstante ...) ausgeführt
  METHOD class_constructor.
    co_red   = VALUE #( col_name = 'COL_RED'
                        value    = 1 ).

    co_green = VALUE #( col_name = 'COL_GREEN'
                        value    = 2 ).

    co_blue  = VALUE #( col_name = 'COL_BLUE'
                        value    = 3 ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
* Variablen vom Typ Enum
  DATA: lv_color_green TYPE lcl_enum_colors=>ty_col_enum.
  DATA: lv_color_red TYPE lcl_enum_colors=>ty_col_enum.
  DATA: lv_color_blue TYPE lcl_enum_colors=>ty_col_enum.

* Variablen mit konstanten Werten vorbelegen
  lv_color_green = lcl_enum_colors=>co_green.
  lv_color_red = lcl_enum_colors=>co_red.
  lv_color_blue = lcl_enum_colors=>co_blue.

* Werteausgabe
  WRITE: / lv_color_green-col_name, lv_color_green-value.
  WRITE: / lv_color_red-col_name, lv_color_red-value.
  WRITE: / lv_color_blue-col_name, lv_color_blue-value.

* Wertevergleich
  IF lv_color_green = lcl_enum_colors=>co_green.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lv_color_green = lcl_enum_colors=>co_red.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

  IF lcl_enum_colors=>co_red = lcl_enum_colors=>co_blue.
    WRITE: / 'Ok.'.
  ELSE.
    WRITE: / 'Not ok.'.
  ENDIF.

[ABAP] ABAP Char- / String-Zeichenkonstanten (Hilfsmittel für Zeichenverarbeitung)

* Klasse CL_ABAP_CHAR_UTILITIES

VERTICAL_TAB           - "Vertical Tab Stop" Character
SPACE_STR_LANGU        - Language ID for SPACE_STR
SPACE_STR              - String with Whitespace Characters
NEWLINE                - Newline
MINCHAR                - Minimum Possible Value
MAXCHAR                - Maximum Possible Value
HORIZONTAL_TAB         - "Horizontal Tab Stop" Character
FORM_FEED              - "Page Break Character"
BACKSPACE              - Backspace Character
ENDIAN                 - Byte Sequence of Application Server
BYTE_ORDER_MARK_BIG    - Unicode - Big Endian
CR_LF                  - "Carriage Return and Line Feed" Character Pair
BYTE_ORDER_MARK_LITTLE - Unicode - Little Endian
CHARSIZE               - Character Length in Bytes
BYTE_ORDER_MARK_UTF8   - UTF-8 Representation of FEFF

[ABAP] Konvertierung Integer (ASCII) HEX CHAR

Variante 1 (Integer (ASCII) -> HEX -> Char)

DATA: ascii_hex TYPE x.
DATA: char TYPE c.

DO 26 TIMES.
* INT -> HEX
  ascii_hex = 64 + sy-index.

* HEX -> CHAR
  cl_abap_conv_in_ce=>create( encoding = 'UTF-8' )->convert( EXPORTING input = ascii_hex
                                                             IMPORTING data  = char ).

  WRITE: / sy-index, '->', ascii_hex, '->', char.
ENDDO.

Variante 2 (Char -> Hex -> Integer (ASCII))

DATA: char TYPE c VALUE 'A'.
DATA: ascii_hex TYPE xstring.
DATA: ascii_int TYPE i.

DATA(o_conv) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' endian = 'L' ).
o_conv->write( data = char ).

* CHAR -> HEX
ascii_hex = o_conv->get_buffer( ).

* HEX -> INT
ascii_int = ascii_hex.

WRITE: / char, '->', ascii_hex, '->', ascii_int.

[ABAP] Hexadezimale IP-Adresse in IPv4-String umwandeln

CLASS lcl_conv DEFINITION.
  PUBLIC SECTION.
*--------------------------------------------------------------------*
    CLASS-METHODS: ipv4hex_to_ipv4string
      IMPORTING
                i_hexadr      TYPE mshostadr
      RETURNING VALUE(ret_ip) TYPE string.
ENDCLASS.
*--------------------------------------------------------------------*
CLASS lcl_conv IMPLEMENTATION.
*--------------------------------------------------------------------*
* Konvertiert IP-Adresse (Hex) nach IPv4-String
*--------------------------------------------------------------------*
* -> i_hexadr - Hostadresse (IP) in Hex
* <- ret_ip   - IP-Adresse (IPv4)
*--------------------------------------------------------------------*
  METHOD ipv4hex_to_ipv4string.
* IP besteht aus 4 Bytes (Hex)
    IF xstrlen( i_hexadr ) = 4.
* jeder Hex-Wert wird in Integer konvertiert
      ret_ip = |{ CONV i( i_hexadr+0(1) ) }.{ CONV i( i_hexadr+1(1) ) }.{ CONV i( i_hexadr+2(1) ) }.{ CONV i( i_hexadr+3(1) ) }|.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

* mshostadr -> TYPE RAW4 -> x
* 255.255.255.0
DATA: ip_hex TYPE mshostadr VALUE 'FFFFFF00'.

WRITE: / lcl_conv=>ipv4hex_to_ipv4string( ip_hex ).

[ABAP] Klassenbasierter Enumerator (bis NW 7.50)

Bis NW 7.50 sind beispielsweise folgende Varianten möglich. Ab NW 7.51: Link

Variante 1: Integer

CLASS lcl_enum DEFINITION FINAL.

  PUBLIC SECTION.

    TYPES: ty_enum TYPE i.

    CLASS-DATA: standard TYPE ty_enum VALUE 1 READ-ONLY.
    CLASS-DATA: high TYPE ty_enum VALUE 2 READ-ONLY.
    CLASS-DATA: low TYPE ty_enum VALUE 3 READ-ONLY.

ENDCLASS.

CLASS lcl_enum IMPLEMENTATION.

ENDCLASS.

START-OF-SELECTION.

  DATA: lv_al TYPE lcl_enum=>ty_enum.

  lv_al = lcl_enum=>standard.

  CASE lv_al.
    WHEN lcl_enum=>standard.
      WRITE: / lcl_enum=>standard.
    WHEN lcl_enum=>high.
      WRITE: / lcl_enum=>high.
    WHEN lcl_enum=>low.
      WRITE: / lcl_enum=>low.
  ENDCASE.

Variante 2: String

CLASS lcl_enum DEFINITION FINAL.

  PUBLIC SECTION.

    TYPES: ty_enum TYPE string.

    CLASS-DATA: standard TYPE ty_enum VALUE 'STANDARD' READ-ONLY.
    CLASS-DATA: high TYPE ty_enum VALUE 'HIGH' READ-ONLY.
    CLASS-DATA: low TYPE ty_enum VALUE 'LOW' READ-ONLY.

ENDCLASS.

CLASS lcl_enum IMPLEMENTATION.

ENDCLASS.

START-OF-SELECTION.

  DATA: lv_al TYPE lcl_enum=>ty_enum.

  lv_al = lcl_enum=>low.

  CASE lv_al.
    WHEN lcl_enum=>standard.
      WRITE: / lcl_enum=>standard.
    WHEN lcl_enum=>high.
      WRITE: / lcl_enum=>high.
    WHEN lcl_enum=>low.
      WRITE: / lcl_enum=>low.
  ENDCASE.