如何在CLP中向BMANMTHRD程序传递十六进制值?
解决CLP中调用BMANMTHRD传递十六进制参数的问题
在CL程序中无法直接在CALL的PARM参数里使用X'...'语法传递十六进制值,必须通过字符变量中转处理,以下是可行的实现方式:
步骤说明
- 定义与十六进制参数字节长度匹配的*CHAR类型变量
- 使用
CHGVAR命令将十六进制值赋值给变量 - 调用程序时传递这些变量作为参数
示例CLP代码
PGM /* 定义对应字节长度的字符变量:X'000000465F'为5字节,X'001F'为2字节 */ DCL VAR(&HEX_PARM2) TYPE(*CHAR) LEN(5) DCL VAR(&HEX_PARM4) TYPE(*CHAR) LEN(2) /* 将目标十六进制值赋值给变量 */ CHGVAR VAR(&HEX_PARM2) VALUE(X'000000465F') CHGVAR VAR(&HEX_PARM4) VALUE(X'001F') /* 调用程序,传递变量参数 */ CALL PGM(BMANMTHRD) PARM(('TESTPGM') (&HEX_PARM2) ('P') (&HEX_PARM4)) ENDPGM
为什么之前的方法失败
直接在PARM中传入十进制数字(如00465),程序接收的是十进制数的字符形式或转换后的数值,和手动调用时传递的原始十六进制字节流完全不匹配,因此无法被程序正确解析。必须通过字符变量保留十六进制对应的原始字节,才能保证参数传递的一致性。
内容的提问来源于stack exchange,提问作者Asymptote
相关产品推荐
相关产品推荐

