是否可以在CL程序中将十六进制格式字符转换回十进制?

时间:2012-11-01 12:28:20

标签: ibm-midrange control-language

我有一个RPG程序A和一个CL程序B.A使用数据结构作为输入参数调用B.此数据结构包含字符和压缩小数。 B中的entry参数声明为字符变量,因此当从A传入entry参数时,十进制值以十六进制格式结束。我需要在B中使用它们的原始十进制值。有没有办法在B中将这些十六进制字符串转换回十进制?

1 个答案:

答案 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

请参阅Variables in CL commands