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

Vincent Snijders vsnijders at quicknet.nl
Wed Nov 22 13:25:35 CET 2006

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

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

>
> So, I'm looking for a much faster and smarter way to do it, rather the