如何將xstring中多餘的00去掉

yangjulei發表於2019-10-26

現在的sap系統都是unicode的,所以每一個字元都會用雙位元組表示。

如字元S,對應的ascii碼為53,但在sap系統中debug時你看到的是5300.

如果我們一開始拿到的是53000A00這個xstring值,怎麼才能將其轉成530A呢。(直接替換0顯然是不合適的)

可通過以下程式碼實現:

  DATA : str       TYPE string VALUE 'S',
         xstr      TYPE xstring,
         lt_binary TYPE TABLE OF solix.
  DATA : lo_conv   TYPE REF TO cl_abap_conv_x2x_ce.
  xstr = '53000A00'.
  WRITE :/ 'unicode十六進位制值:',xstr.
** 二進位制由4103轉4110
  TRY.
      CALL METHOD cl_abap_conv_x2x_ce=>create
        EXPORTING
          in_encoding  = '4103' "uft-16le,雙位元組,存在位元組浪費
          out_encoding = '4110' "uft-8,自壓縮格式,東亞字雙位元組,歐美單位元組
          input        = xstr
        RECEIVING
          conv         = lo_conv.
    CATCH cx_parameter_invalid_type .
    CATCH cx_parameter_invalid_range .
    CATCH cx_sy_codepage_converter_init .
  ENDTRY.
  lo_conv->convert_c( ).
  CLEAR xstr.
  xstr = lo_conv->get_out_buffer( ).
  WRITE : / 'uft-8十六進位制值:',xstr.

執行結果:

unicode十六進位制值: 53000A00

uft-8十六進位制值: 530A

----------------------------------------------------------------------

ps:string轉xstring,可使用函式SCMS_STRING_TO_XSTRING。

***字串轉hex字串,encoding系統預設4110
*  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
*    EXPORTING
*      text     = str
*      encoding = '4103'
*    IMPORTING
*      buffer   = xstr
*    EXCEPTIONS
*      failed   = 1
*      OTHERS   = 2.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7714329/viewspace-2661551/,如需轉載,請註明出處,否則將追究法律責任。

相關文章