ip

本文转载两个文章,结合起来更容易看懂

1.http://blog.chinaunix.net/u/32493/showart_251920.html

取IP地址的方法

*&---------------------------------------------------------------------*
*& Report  Z_IP                                                        *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  Z_IP                                    .
DATA HOSTADR LIKE UINFO-HOSTADR.
DATA HOSTADDR(8).
DATA TERM LIKE UINFO-TERM.
DATA XHCOUNT TYPE I.
DATA: IPTXT(15),ITIMES TYPE I,ITIMES1 TYPE I,HX(2).
DATA: RESULT TYPE I,RESULTTXT(3).
CALL FUNCTION 'TH_USER_INFO'
 IMPORTING HOSTADDR = HOSTADR   "like UINFO-HOSTADR (hex)
           TERMINAL = TERM.  "like UINFO-TERM
HOSTADDR = HOSTADR.
DO 4 TIMES.
 HX = HOSTADDR+ITIMES1(2).
ITIMES = 0.
RESULT = 0.
DO 2 TIMES.
CASE HX+ITIMES(1).
 WHEN 'A'.
     IF ITIMES = 0.
        RESULT = RESULT + 10 * 16.
     ELSE.
        RESULT = RESULT + 10.
     ENDIF.
 WHEN 'B'.
     IF ITIMES = 0.
        RESULT = RESULT + 11 * 16.
     ELSE.
        RESULT = RESULT + 11.
     ENDIF.
 WHEN 'C'.
     IF ITIMES = 0.
        RESULT = RESULT + 12 * 16.
     ELSE.
        RESULT = RESULT + 12.
     ENDIF.
 WHEN 'D'.
     IF ITIMES = 0.
        RESULT = RESULT + 13 * 16.
     ELSE.
        RESULT = RESULT + 13.
     ENDIF.
 WHEN 'E'.
     IF ITIMES = 0.
        RESULT = RESULT + 14 * 16.
     ELSE.
        RESULT = RESULT + 14.
     ENDIF.
 WHEN 'F'.
     IF ITIMES = 0.
        RESULT = RESULT + 15 * 16.
     ELSE.
        RESULT = RESULT + 15.
     ENDIF.
 WHEN OTHERS.
     IF ITIMES = 0.
         RESULT = RESULT + HX+ITIMES(1) * 16.
     ELSE.
         RESULT = RESULT + HX+ITIMES(1).
     ENDIF.
ENDCASE.
ITIMES = ITIMES + 1.
ENDDO.
RESULTTXT = RESULT.
IF IPTXT <> ''.
   CONCATENATE IPTXT '.' RESULTTXT INTO IPTXT.
ELSE.
   IPTXT = RESULTTXT.
ENDIF.
 ITIMES1 = ITIMES1 + 2.
ENDDO.
WRITE IPTXT.
老白的这个很巧妙,不用费力16进制和10进制的转话
IP地址十六进制和常用格式的转换
 
 
REPORT  z_barry_hex_to_ip_addr .
 
DATA: hexhost(8) ,
      iptext(15) TYPE c ,
      p(6) TYPE p .
DATA: tid LIKE arfctid.
CALL FUNCTION 'ARFC_GET_TID'
  IMPORTING
    tid = tid.
hexhost = tid-arfcipid.
PERFORM hex2ipstr USING hexhost iptext .
WRITE / iptext .
 
CLEAR p.
PERFORM ip2dec USING iptext p.
WRITE / p .
 
CLEAR iptext.
PERFORM dec2ip USING p iptext.
WRITE / iptext.
 
*&---------------------------------------------------------------------*
*& 十六进制转换成IP
*&---------------------------------------------------------------------*
FORM hex2ipstr USING value(hexstr) TYPE c
                  ipstr TYPE c .
  DATA: hex TYPE x ,
        dec TYPE i ,
        ipstr_tmp TYPE string .
  CLEAR ipstr.
  DO 4 TIMES.
    hex = hexstr+0(2).
    dec = hex .
    ipstr_tmp = dec .
    CONCATENATE ipstr '.' ipstr_tmp INTO ipstr.
    SHIFT hexstr LEFT BY 2 PLACES .
  ENDDO.
  SHIFT ipstr .
ENDFORM.
 
*&---------------------------------------------------------------------*
*& IP转换成长整型
*&---------------------------------------------------------------------*
FORM ip2dec USING value(ipstr) TYPE c
                  num TYPE p .
*  ipstr= '192.168.0.1'.
  DATA: sum(6) TYPE p   ,
        s1 TYPE string  ,
        s2 TYPE string  .
  CLEAR num.
  s2 = ipstr .
  DO 4 TIMES.
    SPLIT s2 AT '.' INTO s1 s2.
    sum = sum + s1 * ( 256 ** ( 4 - sy-index ) ).
  ENDDO.
  num = sum.
ENDFORM.
 
*&---------------------------------------------------------------------*
*& 长整型转换为IP
*&---------------------------------------------------------------------*
FORM dec2ip USING value(num) TYPE p
                  ipstr TYPE c .
*  num = '3232235521'.
  DATA: iptmp TYPE string ,
        p(6) TYPE p DECIMALS 4 .
  CLEAR ipstr.
  DO 4 TIMES.
    p = num / ( 256 ** ( 4 - sy-index ) ) .
    iptmp = TRUNC( p ) .
    num = num - iptmp * ( 256 ** ( 4 - sy-index ) ) .
    CONCATENATE ipstr '.' iptmp INTO ipstr.
  ENDDO.
  SHIFT ipstr.
ENDFORM.

3. 总结以上两点得到    取用户ip地址的

 

 

 

 report za.

DATA: hexhost(8) ,
      iptext(15) TYPE c ,
      p(6) TYPE p .
DATA: tid LIKE arfctid.
DATA ip LIKE UINFO-HOSTADR.
*CALL FUNCTION 'ARFC_GET_TID'-----用于rfc调用的ip
*  IMPORTING
*    tid = tid.
*hexhost = tid-arfcipid.
*PERFORM hex2ipstr USING hexhost iptext .
*WRITE / iptext .


CALL FUNCTION 'TH_USER_INFO'
 IMPORTING
   HOSTADDR                  = ip

          .


hexhost = ip.
PERFORM hex2ipstr USING hexhost iptext .
WRITE / iptext .


WRITE / iptext .
CLEAR p.
PERFORM ip2dec USING iptext p.
WRITE / p .

CLEAR iptext.
PERFORM dec2ip USING p iptext.
WRITE / iptext.

*&---------------------------------------------------------------------*
*& 十六进制转换成IP
*&---------------------------------------------------------------------*
FORM hex2ipstr USING value(hexstr) TYPE c
                  ipstr TYPE c .
  DATA: hex TYPE x ,
        dec TYPE i ,
        ipstr_tmp TYPE string .
  CLEAR ipstr.
  DO 4 TIMES.
    hex = hexstr+0(2).
    dec = hex .
    ipstr_tmp = dec .
    CONCATENATE ipstr '.' ipstr_tmp INTO ipstr.
    SHIFT hexstr LEFT BY 2 PLACES .
  ENDDO.
  SHIFT ipstr .
ENDFORM.

*&---------------------------------------------------------------------*
*& IP转换成长整型
*&---------------------------------------------------------------------*
FORM ip2dec USING value(ipstr) TYPE c
                  num TYPE p .
*  ipstr= '192.168.0.1'.
  DATA: sum(6) TYPE p   ,
        s1 TYPE string  ,
        s2 TYPE string  .
  CLEAR num.
  s2 = ipstr .
  DO 4 TIMES.
    SPLIT s2 AT '.' INTO s1 s2.
    sum = sum + s1 * ( 256 ** ( 4 - sy-index ) ).
  ENDDO.
  num = sum.
ENDFORM.

*&---------------------------------------------------------------------*
*& 长整型转换为IP
*&---------------------------------------------------------------------*
FORM dec2ip USING value(num) TYPE p
                  ipstr TYPE c .
*  num = '3232235521'.
  DATA: iptmp TYPE string ,
        p(6) TYPE p DECIMALS 4 .
  CLEAR ipstr.
  DO 4 TIMES.
    p = num / ( 256 ** ( 4 - sy-index ) ) .
    iptmp = TRUNC( p ) .
    num = num - iptmp * ( 256 ** ( 4 - sy-index ) ) .
    CONCATENATE ipstr '.' iptmp INTO ipstr.
  ENDDO.
  SHIFT ipstr.
ENDFORM.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值