|
Hello Joe,
Here is a way for non-ILE RPG.
Given the following array definitions (you can change the size of C78 to handle
different size
strings to convert). Note that I am converting each hex digit into a separate
array so I can
show an over/under hexadecimal display. You could easily alter this to convert
the characters
to a side-by-side representation. The basic premise is: since each nybble
(4-bits) is to be
converted to its hex value we need to extract each nybble; since the maximum
value a nybble can
contain is x'F' or decimal 16 we can divide each character by 16 to extract the
most
significant (left-most) nybble and use the remainder for the least significant
(right-most)
nybble.
‚/TITLE SHWFMCR : Show File Member Contents
‚*-------------------------------------------------------------------
‚* A R R A Y D E C L A R A T I O N S
‚*-------------------------------------------------------------------
E C78 78 1 ‚HEX array - IN
E HEX1 78 1 ‚HEX array - OUT
E HEX2 78 1 ‚HEX array - OUT
E HEXDGT 16 16 1 ‚HEX conversion array
‚/TITLE SHWFMCR : Show File Member Contents
‚*-------------------------------------------------------------------
‚* D A T A S T R U C T U R E D E C L A R A T I O N S
‚*-------------------------------------------------------------------
‚* Miscellaneous declares that need to be binary values
IMISC DS
I B 1 20BIN
I 2 2 CBIN
‚* Copy the data to convert to hex *
C MOVEADATA,WDW C78 ‚
<--- C EXSR CVTHEX ‚Convert to hex
‚/TITLE SHWFMCR : Show File Member Contents - CVTHEX
‚*** Start of specifications **********************************************
‚* *
‚* Subroutine name . . . . . : CVTHEX *
‚* *
‚* Descriptive name . . . . : Convert to hexadecimal *
‚* *
‚* Function . . . . . . . . : To convert a value to hexadecimal display *
‚* format. *
‚* *
‚* Input . . . . . . . . . . : C78 - Character string *
‚* *
‚* Output . . . . . . . . . : HEX1 - Top row of hex characters *
‚* HEX2 - Bottom row of hex characters *
‚* *
‚* Exits-- Normal . . . . . : Return to NSI *
‚* -- Error . . . . . . : *
‚* *
‚*** End of specifications ************************************************
---> CSR CVTHEX BEGSR ‚
‚* ------
C Z-ADD*ZERO BIN ‚
C Z-ADD*ZERO O 50 ‚OUT counter
B1 C 1 DO 78 I ‚IN counter
C MOVE C78,I CBIN ‚Make binary
C BIN DIV 16 HI 30 ‚High order nybble
C MVR LO 30 ‚Low order nybble
C ADD 1 HI H ‚Round up for HEXDGT
C ADD 1 LO ‚Round up for HEXDGT
C ADD 1 O ‚Increment OUT counte
C MOVE HEXDGT,HI HEX1,O ‚Convert high order
C MOVE HEXDGT,LO HEX2,O ‚Convert low order
E1 C END ‚1 DO 78
‚*
<--- CSR ENDSR ‚CVTHEX
‚*===================================================================
‚* A R R A Y I N I T I A L I S A T I O N
‚*===================================================================
** Hex conversion - HEXDGT - 16-bytes
0123456789ABCDEF
Regards,
Simon Coulter.
//----------------------------------------------------------
// FlyByNight Software AS/400 Technical Specialists
// Phone: +61 3 9419 0175 Mobile: +61 3 0411 091 400
// Fax: +61 3 9419 0175 E-mail: shc@flybynight.com.au
//
// Windoze should not be open at Warp speed.
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.