×
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Contact US

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

How do I convert hex into numeric

How do I convert hex into numeric

How do I convert hex into numeric

(OP)
I have a program where a field is being passed in through linkage, and need to convert it into numeric to use it.  Is there a simple way to convert this data to 5 digit numeric value?

LINKAGE SECTION.                                        
                                                        
01  port                      PIC X(4).                  

RE: How do I convert hex into numeric

Yup. How you do this depends on the content of the field.

Post samples of all of the data patterns that might be in this field (i.e leading or trailing spaces, imbedded decimal point, imbedded sign, etc).

RE: How do I convert hex into numeric

I wrote a routine (20 years ago) that accomplished that task.
It is written in RM/COBOL, COMP-4 is a binary formant in this compiler (COMP-X for Micro Focus).
The characters must be cheeked to be in range 0-9 or A-F(upper case), max input 18 characters.
I have also the versa routine dec2hex.cbl, that input numeric value and output hex values.

CODE

000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. HEX2DEC.
000003 ENVIRONMENT DIVISION.
000004 CONFIGURATION SECTION.
000005 DATA DIVISION.
000006 WORKING-STORAGE SECTION.
000007 01  I                PIC S9(4) COMP-3.
000008 01  J                PIC S9(4) COMP-3.
000009 01  K                PIC S9(4) COMP-3.
000010 01  NN               PIC XX VALUE LOW-VALUES.
000011 01  NN-R REDEFINES NN.
000012     02 FILLER        PIC X.
000013     02 N-X           PIC X.
000014 01  N REDEFINES NN   PIC 9(4) COMP-4.
000015 01  X-18             PIC X(18) VALUE SPACES.
000016 01  X-18-R REDEFINES X-18.
000017     02 VEC-X-18      PIC X OCCURS 18.
000018 01  N-18-X.
000019     02 N-18          PIC 9(18) COMP-4.
000020 01  N-18-X-R REDEFINES N-18-X.
000021     02 VEC-N-18      PIC X OCCURS 8.
000022 01  F-18             PIC ----,---,---,---,---,---.
000023 01  XX               PIC XX VALUE LOW-VALUES.
000024 01  XX-R REDEFINES XX.
000025     02 FILLER        PIC X.
000026     02 X             PIC X.
000027 01  X-9 REDEFINES XX PIC 9(4) COMP-4.
000028 01  VECTOR.
000029     02 VEC   PIC X OCCURS 18.
000030 01  VECTOR-HEX PIC X(132)
000031       VALUE   "00000001000200030004000500060007000800090010001100@A01
000032-            "1200130014001500000016003200480064008000960112012801@B
000033-            "44016001760192020802240240    ".                    @C
000034 01  VECTOR-HEX REDEFINES VECTOR-HEX.
000035     02 VEC-HEX PIC 9(4) OCCURS 32.
000036 01  VECTOR-OUT.
000037     02 VEC-OUT PIC X OCCURS 9.
000038*********************************************************************
000039 PROCEDURE DIVISION.
000040 MAIN SECTION.
000041 1.  DISPLAY "ENTER HEX VALUES:".
000042     ACCEPT X-18.
000043     PERFORM HEX-TO-DEC.
000044     MOVE N-18 TO F-18.
000045     DISPLAY F-18.
000046     GOBACK.
000047 HEX-TO-DEC.
000048     MOVE X-18 TO VECTOR.
000049     MOVE LOW-VALUES TO VECTOR-OUT.
000050     MOVE 0 TO J.
000051     PERFORM HEX-TO-DEC2 THRU EX-HEX-TO-DEC
000052                          VARYING I FROM 1 BY 2 UNTIL I > 9.
000053     MOVE 0 TO N-18.
000054     MOVE 8 TO K.
000055     PERFORM HEX-TO-DEC1 VARYING I FROM J BY -1 UNTIL I < 1.
000056    HEX-TO-DEC1.
000057     MOVE VEC-OUT(I) TO VEC-N-18(K).
000058     SUBTRACT 1 FROM K.
000059    HEX-TO-DEC2.
000060     MOVE 0 TO X-9.
000061     MOVE VEC(I) TO X.
000062     IF X NUMERIC SUBTRACT 31 FROM X-9 GIVING K
000063      ELSE IF X NOT < "A" AND NOT > "F"
000064                     SUBTRACT 38 FROM X-9 GIVING K
000065                ELSE MOVE 77 TO I
000066                     GO TO EX-HEX-TO-DEC.
000067     MOVE VEC-HEX(K) TO N.
000068     ADD 1 I GIVING K.
000069     MOVE 0 TO X-9.
000070     MOVE VEC(K) TO X.
000071     IF X NUMERIC SUBTRACT 47 FROM X-9 GIVING K
000072      ELSE IF X NOT < "A" AND NOT > "F"
000073                     SUBTRACT 54 FROM X-9 GIVING K
000074                ELSE MOVE "0" TO VEC-X-18(K)
000075                     MOVE 1 TO K.
000076     ADD VEC-HEX(K) TO N.
000077     ADD 1 TO J.
000078     MOVE N-X TO VEC-OUT(J).
000079 EX-HEX-TO-DEC.

RE: How do I convert hex into numeric

You can use the inspect verb to solve:
INSPECT PORT REPLACING LEADING SPACES BY "0".
MOVE PORT TO WS-PORT-NUM.

;where WS-PORT-NUM will be defined as PIC 9(05).  

RE: How do I convert hex into numeric

Delta, you assuming that the data is justified right, What if spaces ,if exist, is in the right side,And what if there is more then 4 characters?.

I don't sure that input file with 'X' format like 'F4C3" will be converted to its binary value.

RE: How do I convert hex into numeric

As the TS has not bothered to provide any feedback in almost a month, further investment n the topic is probably wasted. . .

delta403,
Your "solution" will not work for all cases and we don't have a proper definition of the "requirement".

RE: How do I convert hex into numeric

People say "hex" quite often without much of a clue.

For all we know this might be a 32-bit signed or unsigned binary integer.

RE: How do I convert hex into numeric

Hex is an abbreviation to the word HexaDecimal. Pertaining to a numbering system which uses 16 as the base (as opposed to 10. BTW, the word in English HEX is to perform magic...




RE: How do I convert hex into numeric

Quote:

Pertaining to a numbering system which uses 16 as the base
For this dialog i suspect there is no need to consider base 16 numbers.

On the mainframe every byte will contain a value between x'00' and x'FF' - usually with no concern for "numbering". If the "field" is not defined as some kind of binary number, the values are not base 16 - they are simply 1s and 0s.

If a binary is presented as a pic x(4) field, redefine the x(4) as a pic 9(9) comp for the unsigned value or s9(9) for a signed value. You need to know which as the values depend on whether the value is sined or not.

RE: How do I convert hex into numeric

Then simply move the redefined parm value to the "numeric" field.

Meant to have this in the prior reply, but cojuld not "edit" the post. . .

RE: How do I convert hex into numeric

did you see this old link? http://www.tek-tips.com/viewthread.cfm?qid=54782

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members! Already a Member? Login


Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close