AS / 400上的十进制到字符转换

时间:2014-11-14 15:47:33

标签: ibm-midrange control-language

在CL中,我试图将数字(193)转换为其alpha表示(A)。什么都没有,需要一点帮助。是否有CHAR功能?

3 个答案:

答案 0 :(得分:2)

这个例子给出了EBCDIC字符" A"在变量& TXT1:

PGM                                                
DCL        VAR(&NUM) TYPE(*DEC) LEN(3 0) VALUE(193)
DCL        VAR(&TXT2) TYPE(*CHAR) LEN(2)           
DCL        VAR(&TXT1) TYPE(*CHAR) LEN(1)           

CHGVAR     VAR(%BIN(&TXT2 1 2)) VALUE(&NUM)        
CHGVAR     VAR(&TXT1) VALUE(%SST(&TXT2 2 1))       
SNDUSRMSG  MSG(&TXT1)                              
ENDPGM                                             

答案 1 :(得分:1)

最近的操作系统版本中最简单的方法是使用字符定义重新定义或覆盖数字:

   dcl   &numVal      *uint     2     value( 193 )
   dcl   &charVal     *char     1     stg( *DEFINED ) defvar( &numVal   2 )

在一个简单的CL程序中,它可能如下所示:

pgm


   dcl   &numVal      *uint     2     value( 193 )
   dcl   &charVal     *char     1     stg( *DEFINED ) defvar( &numVal   2 )

   /* Show current character equivalence... */
   sndusrmsg   msg( &charVal ) msgtype( *INFO )

   /* Set a new numeric value... */
   chgvar      &numVal         ( 194 )

   /* Show new character equivalence... */
   sndusrmsg   msg( &charVal ) msgtype( *INFO )

   return

endpgm

& charVal值将显示为" A"第一次和" B"第二。 * UINT变量必须定义为2字节或更大的变量,因为CL不能定义单个字节的整数变量。 2字节整数的第二个字节具有所需的位模式。二进制整数值在内存中具有十六进制等效值,对应于字符" A"," B"或者其他什么,

答案 2 :(得分:0)

您需要使用

CHGVAR   VAR(&CHAR)  VALUE(&NUM)