[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
> bad way above.

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




More information about the fpc-devel mailing list