oracle 字符串中有x,如何将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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值