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

ik idokan at gmail.com
Wed Nov 22 15:56:04 CET 2006


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','D7920000 ')

But I need the range of 4 numbers and not the range of handrands of thousands.

>
> >
> > 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/


More information about the fpc-devel mailing list