Portal | References | Downloads | Info | Programs | JCLs | Mainframe wiki | Quick Ref

Author Message
Martylin

New User

Joined: 08 Mar 2016
Posts: 13
Location: Taiwan

 Posted: Wed May 13, 2020 8:27 pm    Post subject: how to do bit operations from CHAR I have to implement a function Like that CHAR　AB HEX　　C1 C2 BIT　　11000001 11000010 CHAR　CD HEX　　C3 C4 BIT　　11000011 11001000 Then BIT1 and BIT2 do XOR 11000001 11000010 11000011 11001000 ============== 00000010 00001010 the result must convert bit to hex string 020A my solution 1. using function HEX convert Char to HEX String 2. Substr(Hex_string,1,1) then call select when when('0') bit1 = bit1 | '00000000'B; when('1') bit1 = bit1 | '00010000'B; when('2') bit1 = bit1 | '00100000'B; ... 3. Substr(Hex_string,2,1) then call select when when('0') bit1 = bit1 | '00000000'B; when('1') bit1 = bit1 | '00000001'B; when('2') bit1 = bit1 | '00000010'B; ... 4. once convert CHAR to BIT(8) , do BIT1 xor BIT2 => BIT3 5. using function convert BIT to hex String HEX(BIT3) I haven't tried to write the code yet, but I think it probably works, and I just want to make sure is there any easy way to do it or some internal functions can do it easily.

sergeyken

Active Member

Joined: 29 Apr 2008
Posts: 860
Location: Maryland

Posted: Wed May 13, 2020 10:37 pm    Post subject:

You have a complete mess in your mind regarding datatypes used in PL/I (and probably, regarding the whole IBM environment).

First of all, PL/I doesn't support datatype HEX as you tried to demonstrate. So, the rest of your discussion becomes useless, so far.

 Quote: Data attributes Data attributes describe computational data, program-control data, and program characteristics. AREA BINARY BIT CHARACTER COMPLEX DECIMAL DIMENSION ENTRY FILE FIXED FLOAT FORMAT GRAPHIC HANDLE LABEL LOCATES NONVARYING OFFSET ORDINAL PICTURE POINTER PRECISION REAL RETURNS SIGNED STRUCTURE TASK TYPE UNSIGNED UNION VARYING VARYING4 VARYINGZ WIDECHAR WIDEPIC

Likely, you may need to use the bitwise XOR in this manner
 Code: UNSPEC(CHARS1) ¬ UNSPEC(CHARS2)

or maybe something else, depending on your actual requirements.
prino

Senior Member

Joined: 07 Feb 2009
Posts: 1220
Location: Vilnius, Lithuania

Posted: Thu May 14, 2020 1:06 am    Post subject:

 Code: dcl (a,b,c) char(2); unspec(c) = bool(unspec(a), unspec(b), '0110'b);

Next time RTFM, and if you're not an expert, don't post here. And for what it's worth, the HEX builtin does not do what you apparently think it does!
Martylin

New User

Joined: 08 Mar 2016
Posts: 13
Location: Taiwan

 Posted: Thu May 14, 2020 1:24 pm    Post subject: I doing too complex, thanks
 All times are GMT + 6 Hours
 Page 1 of 1

Search our Forum:

 Topic Author Forum Replies Posted Similar Topics COnvert a column with mix of hex ,cha... shub2204 DB2 5 Fri Oct 02, 2020 2:20 pm How do i verify the char field is hav... Raghu M N PL/I & Assembler 1 Tue Sep 22, 2020 9:26 pm how to convert Hex String t char hex Martylin PL/I & Assembler 6 Fri Jun 05, 2020 7:45 pm Insert System Runtime in HEADER In SY... Rick Ryan SYNCSORT 9 Tue May 26, 2020 9:01 pm comparasion between BIN FIXED(63) an... javen777 PL/I & Assembler 10 Wed Apr 22, 2020 5:11 pm

 © 2003-2020 IBM MAINFRAME Software Support Division
 Job Vacancies | Forum Rules | Bookmarks | Subscriptions | FAQ | Polls | Contact Us