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

Joao Morais post at joaomorais.com.br
Wed Nov 22 14:12:12 CET 2006

```ik wrote:
> 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 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.
>
> So, I'm looking for a much faster and smarter way to do it, rather the

Something like this?

for I := \$D790 to \$D792 do
YourValue := I * \$10000;

Otherwise, if I didn't get what you mean, perhaps you can use some
boolean arithmetic.

--
Joao Morais

```