Problem solve Get help with specific problems with your technologies, process and projects.

Binary proves to be useful

This tip uses a binary field and data structures to obtain the next sequential hexadecimal value.

This tip uses a binary field and data structures to obtain the next sequential hexadecimal value. It also demonstrates a technique for placing and extracting packed data from a character string.

I came across this method while trying to find a way to change a key so a setgt operand would step me through an abnormal file in an abnormal way. The file has a 10-character key and there was a need to step through the file by the first three characters in the key. In my case, the binary increment worked great. I found it quite interesting that the next hex character can done in this fashion.


f*  written by James Greene on May 5, 2004

f*  TRIPLEJ Inc.
f*  801-673-2233
f*  PO BOX 708992
f*  Sandy, UT   84070-8992
f*  1. program demonstrates how to obtain the next sequential
f*     hexadecimal character
f*  2. how to store/retreive packed decimal data from a char string
d mstrdta         s             10    inz('abcdefghij')
d                 ds
d  bin2a                  2      2
d  bin2                   1      2b 0      inz
d                 ds
d  today                  1      5P 0 inz(20040505)
d  todaya                 1      5
d                 ds
d  pdate                  1      5P 0
d  pdatealpha             1      5
c* show mstrdta prior to any changes
c     mstrdta       dsply
c* increment position 1 of mstrdta and display
c* in this case lower case 'a' is incremented to lower case 'b'
c                   eval      bin2a = %subst(mstrdta:1:1)
c                   eval      bin2  = bin2 + 1
c                   eval      %subst(mstrdta:1:1) = bin2a
c     mstrdta       dsply
c* change mstrdta positons 2 - 6 = packed date - 20040505
c* result looks like garbage
c                   eval      %subst(mstrdta:3:6) = todaya
c     mstrdta       dsply
c* extract packed date from mstrdta and display
c                   eval      pdatealpha = %subst(mstrdta:3:6)
c     pdate         dsply
c                   eval      *inlr = *on


The Best Web Links: tips, tutorials and more.

Ask your programming questions--or help out your peers by answering them--in our live discussion forums.

Ask the Experts yourself: Our application development gurus are waiting to answer your programming questions.

Dig Deeper on iSeries CL programming

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.