2014-11-14 5 views
2

CL에서 숫자 (193)를 알파 표현 (A)으로 변환하려고합니다. 아무것도 얻지 못하면 조금 도움이 필요합니다. CHAR 함수가 있습니까? 재정의 당신은 어떤 최신 OS 릴리스에AS/400에서 문자 변환시 십진수

CHGVAR VAR(&CHAR) VALUE(&NUM) 

답변

2

이 예는 EBCDIC 변수 & TXT1에 문자 "A"를 제공합니다 문자 정의가있는 숫자 :

간단한 CL 프로그램에서 m ight는 다음과 같다 :

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"두번째로 표시한다. CL이 1 바이트의 정수 변수를 정의 할 수 없으므로 * UINT 변수는 2Y이트 이상의 변수로 정의되어야합니다. 2 바이트 정수의 두 번째 바이트에는 필요한 비트 패턴이 있습니다. 이진 정수 값은 문자 "A", "B"또는 무엇이든간에 일치하는 메모리의 16 진수 값을가집니다.

+0

이 모든 값은 "#"대신에 00123입니다 (예제로 숫자 사용). – selpatS20

+0

나는 그 질문을 오해했다. 숫자를 문자로 변환하는 대신 숫자 값을 기반으로 EBCDIC 문자를 제공하도록 예제 프로그램을 편집했습니다. – dmc

0

, 또는 오버레이의 :

+0

이 모든 반환 값은 0으로 채워진 왼쪽 숫자입니다. – selpatS20

+0

정말로 무엇을하고 있는지 조심해야합니다. RPG 프로그램을 부르시겠습니까? RPG 프로그램이 숫자를 취하는 경우에도 * CHAR로 모든 것을 전달할 수 있습니다. 주의해야하는 이유는 리터럴이 기본 형식으로 전달된다는 것입니다. – Abercrombieande

1

간단한을 사용할 필요가

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

좋은 대안입니다. 나는 여전히 V5R4 시스템에서 작업하고 있으므로 내 대답은 분명히 그 관점에서 작성되었습니다. – dmc

+0

@dmc 이것은 V5R4 이상의 시스템에서 작동합니다. – user2338816

+0

감사합니다. – dmc