# [fpc-devel] Efficient way to inc loop over hexadecimal values

Dominique Leducq dleducq at magellan-ing.fr
Wed Nov 22 16:20:30 CET 2006

```On Wed, 22 Nov 2006 16:56:04 +0200
ik <idokan at gmail.com> wrote:

> On 11/22/06, Vincent Snijders <vsnijders at quicknet.nl> wrote:
> > ik schreef:
> > > On 11/22/06, Dominique Leducq <dleducq at magellan-ing.fr> wrote:
> > >> ik a écrit :
> > >> > Hi List,
> > >> >
> > >> > I have two cardinal numbers that represent ranges.
> > >> >
> > >> > The 10 base value of that two variables are useless and far from
> > >> > having any meaning for my needs.However the hexa number does have
> > >> > meaning after I'm changing the network order (aka big endian).
> > >> >
> > >> > I can think on many non efficient ways to while loop with inc but not
> > >> > even one way to inc it in an efficient way.
> > >> >
> > >> > So, I'm looking for an efficient way to loop from left range to right
> > >> > range when the values are in Hexa-decimal.
> > >> >
> > >> > Thank you for any help on this matter,
> > >> >
> > >> > Ido
> > >>
> > >> I'm afraid I don't understand your problem. Decimal or hexadecimal are
> > >> string representation formats, cardinal and integer values are stored
> > >> and dealt with internally in binary form !
> > >> If your values are hexadecimal number stored in strings, why not convert
> > >> them first to Cardinal ?
> > >>
> > >> Could you perhaps give an example or be more precise ?
> > >
> > > OK, I have (for this example, taken from my own testing) the following
> > > numbers:
> > > Decima numbers: a = 3616538624 b = 3616669696
> > > The hexa values are: a = D7900000 b = D7920000
> > >
> > > As you can see the range differences between the decimals are way
> > > bigger then the hexa values.
> >
> > The numerical difference is the same. The difference seems larger if you are
> > speaking about the string represetations of these 32 bits numbers
> > ('3616538624','3616669696') and ('D7900000',' ')
>
> But I need the range of 4 numbers and not the range of handrands of thousands.

There are far more than 4 numbers between D7900000 and D7920000, and as much as between 3616538624 and 3616669696.
Or what are you calling numbers ? Digits ?
I suggest you give us a sample of what values your loop counter may take, and in what order.

>
> >
> > >
> > > The thing is that the hexa numbers represent chars of a UTF-8
> > > encoding. D790 is the char "א".
> > > (http://www.utf8-chartable.de/unicode-utf8-table.pl look for Hebrew).
> > >
> > > So I wish to run on the range between a..b (in Hexa) and to have all
> > > of the values in between.
> > >
> > > There are many bad ways to do it such as:
> > >
> > > while (not hexStr (i) = b) do
> > > begin
> > >  ...
> > >  inc (i)
> > >  ....
> > > end;
> > >
> > > This exampel does not cover all the possible values I might need.
> >
> > Why not?
>
> It seems to be good only for "basic" ranges... I'm creating a function
> that you can give a start range and end range, and it return all of
> the chars on that range. so I do not know if I'll place the first 97
> letter up to the FFFF letter, that this loop will work well, or fast
> enough.
>
> >
> > >
> > > So, I'm looking for a much faster and smarter way to do it, rather the
> > > bad way above.
> >
> > Do you want to operate on strings or on numbers or on somthing else?
>
> I prefer numeric handing then string handling.
>
> >
> > Vincent
>
> Ido
> --
> http://ik.homelinux.org/

```