2

在 CL 中,我试图将数字 (193) 转换为其 alpha 表示 (A)。一无所获,需要一点帮助。有 CHAR 函数吗?

4

3 回答 3

2

此示例在变量 &TXT1 中给出了 EBCDIC 字符“A”:

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                                             
于 2014-11-14T16:02:02.853 回答
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”或其他字符的十六进制等价物,

于 2014-11-15T07:05:35.200 回答
0

你需要使用

CHGVAR   VAR(&CHAR)  VALUE(&NUM)
于 2014-11-14T16:03:05.603 回答