Преобразование десятичных чисел в символы в AS/400

В CL я пытаюсь преобразовать число (193) в его альфа-представление (A). Приходить ни с чем, нужна небольшая помощь. Есть ли функция CHAR?

3 ответа

Решение

Этот пример дает 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                                             

В любом последнем выпуске ОС проще всего переопределить или наложить числовое значение с помощью определения символа:

   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" или чему-либо еще,

Вам нужно использовать

CHGVAR   VAR(&CHAR)  VALUE(&NUM)
Другие вопросы по тегам