url_hex_decode_x

in src/zgoog_cl_content_repo_gcs.clas.abap [0:0]


  METHOD url_hex_decode_x.

    DATA lo_convout TYPE REF TO cl_abap_conv_out_ce.

    DATA: lv_buffer TYPE string,
          lv_hex    TYPE c LENGTH 2,
          lv_x      TYPE x,
          lv_c      TYPE c.

    CLEAR rv_out.
    lv_buffer = iv_in.

    lo_convout = cl_abap_conv_out_ce=>create( encoding = '1100' ).

    WHILE lv_buffer IS NOT INITIAL.
      IF lv_buffer(1) = '%'.
        SHIFT lv_buffer LEFT BY 1 PLACES.
        lv_hex = lv_buffer.
        IF lv_hex CO '0123456789abcdefABCDEF'.
          lv_x = lv_hex.
          CONCATENATE rv_out lv_x INTO rv_out IN BYTE MODE.
        ENDIF.
        SHIFT lv_buffer LEFT BY 2 PLACES.
      ELSE.
        lv_c = lv_buffer(1).
        lo_convout->write( data = lv_c ).
        lv_x = lo_convout->get_buffer( ).
        lo_convout->reset( ).
        CONCATENATE rv_out lv_x INTO rv_out IN BYTE MODE.
        SHIFT lv_buffer LEFT BY 1 PLACES.
      ENDIF.
    ENDWHILE.