2014-11-14 5 views

ответ

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            
+0

Все это возвращает 0вместо «#» (используя ваш номер в качестве примера). – selpatS20

+0

Я неправильно понял вопрос. Отредактировал примерную программу, чтобы присвоить символ EBCDIC на основе числового значения, а не просто преобразовать число в символ. – dmc

0

Вы должны использовать

CHGVAR VAR(&CHAR) VALUE(&NUM) 
+0

Все это возвращает число, оставшееся с нулями. – selpatS20

+0

Вам действительно нужно быть осторожным с тем, что вы делаете. Вы называете программу RPG? Вы можете передать все как * CHAR, даже если программа RPG принимает численные значения. Причиной быть осторожным является то, что литералы передаются с форматами по умолчанию – Abercrombieande

1

Простейшим в любом недавнем выпуске ОС переопределять или перекрывающих числовое значение с указанием символа:

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

В простой программе CL это m РАВО выглядеть следующим образом:

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 будет отображаться как «А» в первый раз и «B» второго. Переменная * UINT должна быть определена как переменная размером 2 байта или более, так как CL не может определить целочисленные переменные одного байта. Второй байт 2-байтового целого имеет требуемую битовую диаграмму. Бинарное целочисленное значение имеет шестнадцатеричный эквивалент в памяти, который соответствует символу «A», «B» или тому подобное,

+0

Хорошая альтернатива. Я все еще работаю над системой V5R4, поэтому мой ответ определенно написан с этой точки зрения. – dmc

+0

@dmc Это работает на системах V5R4 и более поздних версий. – user2338816

+0

Полезно знать, спасибо! – dmc

 Смежные вопросы

  • Нет связанных вопросов^_^