View previous topic :: View next topic
|
Author |
Message |
Martylin
New User
Joined: 08 Mar 2016 Posts: 13 Location: Taiwan
|
|
|
|
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 |
|
|
sergeyken
Senior Member
Joined: 29 Apr 2008 Posts: 2115 Location: USA
|
|
|
|
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 |
|
|
prino
Senior Member
Joined: 07 Feb 2009 Posts: 1310 Location: Vilnius, Lithuania
|
|
|
|
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 |
|
|
Martylin
New User
Joined: 08 Mar 2016 Posts: 13 Location: Taiwan
|
|
|
|
I doing too complex, thanks |
|
Back to top |
|
|
|