如何将xstring中多余的00去掉

现在的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.

    原文作者:yangjulei
    原文地址: http://blog.itpub.net/7714329/viewspace-2661551/
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞