如何於 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期三, 11月 08, 2023
2009-07-16 如何於 CL 中直接做字元與 16 進位字串間的轉換?(cvthc將字元轉換為 16 進位字串,cvtch將16 進位字串轉換為字元)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言