Преобразование десятичных чисел в символы в 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" или чему-либо еще,