IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

how to do bit operations from CHAR


IBM Mainframe Forums -> PL/I & Assembler
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
Martylin

New User


Joined: 08 Mar 2016
Posts: 13
Location: Taiwan

PostPosted: Wed May 13, 2020 8:27 pm
Reply with quote

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.
 
 
Back to top
View user's profile Send private message
sergeyken
Warnings : 2

Senior Member


Joined: 29 Apr 2008
Posts: 1201

PostPosted: Wed May 13, 2020 10:37 pm
Reply with quote

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.
Back to top
View user's profile Send private message
prino
Warnings : 1

Senior Member


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

PostPosted: Thu May 14, 2020 1:06 am
Reply with quote

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!
Back to top
View user's profile Send private message
Martylin

New User


Joined: 08 Mar 2016
Posts: 13
Location: Taiwan

PostPosted: Thu May 14, 2020 1:24 pm
Reply with quote

icon_lol.gif icon_lol.gif icon_lol.gif icon_lol.gif

I doing too complex, thanks
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> PL/I & Assembler

 


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

Back to Top