我有一个RPG程序A和一个CL程序B.A使用数据结构作为输入参数调用B.此数据结构包含字符和压缩小数。 B中的entry参数声明为字符变量,因此当从A传入entry参数时,十进制值以十六进制格式结束。我需要在B中使用它们的原始十进制值。有没有办法在B中将这些十六进制字符串转换回十进制?
答案 0 :(得分:2)
您无需转换。在数据结构中的适当位置定义十进制字段。
PGM (&STRUCT)
DCL &STRUCT *CHAR 12
DCL &NAME *CHAR 10 STG(*DEFINED) DEFVAR(&STRUCT)
DCL &NBR *DEC (3 0) STG(*DEFINED) DEFVAR(&STRUCT 11)
当定位时,* DEFINED存储方法效果很好。在位置可能不同的情况下,请使用* BASED存储。
在此示例中,在由format参数确定的位置中存在数值。该值将增加1或2。
PGM (&STRUCT)
DCL &STRUCT *CHAR 80
DCL &FMT *CHAR 4
DCL &P1 *PTR
DCL &NUM *DEC (3 0) STG(*BASED)
...
CHGVAR &FMT %SUBSTR(&STRUCT 1 4)
CHGVAR &P1 %ADDRESS(&STRUCT)
SELECT
WHEN (&FMT = 'ONE ') THEN(DO)
CHGVAR %OFFSET(&P1) 20 /* POS 21 IN STRUCT */
CHGVAR &NUM (&NUM + 1) /* INCREMENT NUMBER BY 1 */
ENDDO
WHEN (&FMT = 'TWO ') THEN(DO)
CHGVAR %OFFSET(&P1) 40 /* POS 41 IN STRUCT */
CHGVAR &NUM (&NUM + 2) /* INCREMENT NUMBER BY 2 */
ENDDO
OTHERWISE DO
/* EXIT WITH ERROR */
...
ENDDO
ENDSELECT