# how to do bit operations from CHAR

Author Message
Martylin

New User

Joined: 08 Mar 2016
Posts: 13
Location: Taiwan

 Posted: Wed May 13, 2020 8:27 pm 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: 924
Location: Maryland

Posted: Wed May 13, 2020 10:37 pm

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
Warnings : 1

Senior Member

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

Posted: Thu May 14, 2020 1:06 am

 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 I doing too complex, thanks
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics COnvert a column with mix of hex ,cha... DB2 5 How do i verify the char field is hav... PL/I & Assembler 1 how to convert Hex String t char hex PL/I & Assembler 6 Insert System Runtime in HEADER In SY... SYNCSORT 9 comparasion between BIN FIXED(63) an... PL/I & Assembler 10
Search our Forums: