星期三, 11月 08, 2023

2009-07-16 如何於 CL 中直接做字元與 16 進位字串間的轉換?(cvthc將字元轉換為 16 進位字串,cvtch將16 進位字串轉換為字元)


如何於 CL 中直接做字元與 16 進位字串間的轉換?(cvthc將字元轉換為 16 進位字串,cvtch將16 進位字串轉換為字元)

要於 CL 中直接做字元與 16 進位字串間的轉換,需要呼叫系統 API (cvthc:將字元轉換為 16 進位字串,cvtch:將16 進位字串轉換為字元)。
例如:

使用 cvthc 將 "AB" 轉換為 "C1C2"。
使用 cvtch 將 "C1C1" 轉換為 "AB"。





File  : QCLSRC
Member: CVTHC1TO2
Type  : CLLE
OS version: V5R4 以上
Usage : CRTCLMOD (xxx/CVTHC1TO2)
cvthc:將字元轉換為 16 進位字串


PGM  (&SRCSTR &SRCLEN &TGTSTR)
             DCL        VAR(&SRCSTR) TYPE(*CHAR) LEN(256)
             DCL        VAR(&PSRCSTR) TYPE(*PTR) STG(*DEFINED) +
                          DEFVAR(&SRCSTR)
             DCL        VAR(&TGTSTR) TYPE(*CHAR) LEN(512)
             DCL        VAR(&PTGTSTR) TYPE(*PTR) STG(*DEFINED) +
                          DEFVAR(&TGTSTR)
             DCL        VAR(&SRCLEN) TYPE(*DEC) LEN(3 0)
             DCL        VAR(&TGTLEN) TYPE(*INT)

             CHGVAR     &TGTLEN (&SRCLEN * 2)

  /* Convert char 'AB' to Hex String 'C1C2' */
             CALLPRC    PRC('cvthc') PARM(&PTGTSTR  +
                          &PSRCSTR   (&TGTLEN *BYVAL))

ENDPGM



File  : QCMDSRC
Member: CVTHC1TO2
Type  : CMD
OS version: V5R4 以上
Usage : CRTCMD CMD(xxx/CVTHC1TO2) PGM(xxx/CVTHC1TO2) ALLOW(*IPGM *BPGM)

/*================================================================*/
/* COMMAND CVTHC1TO2                                              */
/* TO COMPILE :                                                   */
/*        CRTCMD     CMD(XXX/CVTHC1TO2) PGM(XXX/CVTHC1TO2) +      */
/*                      SRCFILE(XXX/QCMDSRC)                      */
/*================================================================*/


 CVTHC1TO2:  CMD        PROMPT('CVT Char to HEX String (cvthc)')

             PARM       KWD(SRCSTR) TYPE(*CHAR) LEN(256) MIN(1) +
                          PROMPT('Source string')

             PARM       KWD(SRCLEN) TYPE(*DEC) LEN(3) MIN(1) +
                          EXPR(*YES) PROMPT('Source string length')

             PARM       KWD(TGTSTR) TYPE(*CHAR) LEN(512) +
                          RTNVAL(*YES) PROMPT('CL var for +
                          HEX output  (512)')



File  : QCLSRC
Member: CVTCH2TO1
Type  : CLLE
OS version: V5R4 以上
Usage : CRTCLMOD (xxx/CVTCH2TO1)
        CRTPGM PGM(xxxx/CVTCH2TO1) BNDDIR(QC2LE)
cvtch:將16 進位字串轉換為字元


PGM  (&SRCSTR &SRCLEN &TGTSTR)
             DCL        VAR(&SRCSTR) TYPE(*CHAR) LEN(512) /* Hex STR */
             DCL        VAR(&PSRCSTR) TYPE(*PTR) STG(*DEFINED) +
                          DEFVAR(&SRCSTR)
             DCL        VAR(&TGTSTR) TYPE(*CHAR) LEN(256) /* Char STR*/
             DCL        VAR(&PTGTSTR) TYPE(*PTR) STG(*DEFINED) +
                          DEFVAR(&TGTSTR)
             DCL        VAR(&SRCLEN) TYPE(*DEC) LEN(3 0)
             DCL        VAR(&HEXSTRLEN) TYPE(*INT)

             CHGVAR     &HEXSTRLEN  &SRCLEN

  /* Convert Hex String 'C1C2' to char 'AB' */
             CALLPRC    PRC('cvtch') PARM(&PTGTSTR  +
                          &PSRCSTR   (&HEXSTRLEN *BYVAL))

ENDPGM



File  : QCMDSRC
Member: CVTCH2TO1
Type  : CMD
OS version: V5R4 以上
Usage : CRTCMD CMD(xxx/CVTCH2TO1) PGM(xxx/CVTCH2TO1) ALLOW(*IPGM *BPGM)

/*================================================================*/
/* COMMAND CVTCH2TO1                                              */
/* TO COMPILE :                                                   */
/*        CRTCMD     CMD(XXX/CVTCH2TO1) PGM(XXX/CVTCH2TO1) +      */
/*                      SRCFILE(XXX/QCMDSRC)                      */
/*================================================================*/
/* USAGE SAMPLE in CLP:                                           */
/*================================================================*/

 CVTHC1TO2:  CMD        PROMPT('CVT Hex String to Char (cvtch)')

             PARM       KWD(SRCSTR) TYPE(*CHAR) LEN(512) MIN(1) +
                          PROMPT('Source string')

             PARM       KWD(SRCLEN) TYPE(*DEC) LEN(3) MIN(1) +
                          EXPR(*YES) PROMPT('Source string length')

             PARM       KWD(TGTSTR) TYPE(*CHAR) LEN(256) +
                          RTNVAL(*YES) PROMPT('CL var for +
                          Char output (256)')



File  : QCLSRC
Member: CVTHEXCT
Type  : CLLE
OS version: V5R4 以上
Usage : CRTBNDCL PGM(xxx/CVTHEXCT)
 CALL CVTHEXCT
        WRKJOB option 4, see last QPPGMDMP file 

PGM
             DCL        VAR(&SRCSTR) TYPE(*CHAR) LEN(256)
             DCL        VAR(&TGTSTR) TYPE(*CHAR) LEN(512)
             DCL        VAR(&SRCLEN) TYPE(*INT)


             CVThc1To2  SRCSTR('ABCDEFGHIJK') SRCLEN(11) +
                          TGTSTR(&TGTSTR)

             CVTch2TO1  SRCSTR(&TGTSTR      ) SRCLEN(22) +
                          TGTSTR(&SRCSTR)

             dmpclpgm


ENDPGM





沒有留言: