Hej Thomas
Undskyldningen er modtaget, men jeg følte mig vidst ikke specielt krænket.
Jeg vidste jo jeg havde ret
MVH Carsten
Tomas Christiansen <toc@blikroer.removethis.dk> skrev i en
nyhedsmeddelelse:DmVU5.396$Ow2.7771@news.get2net.dk...
> Jette Nielsen skrev:
>
> > Ok, men nu taler I jo ikke lige frem newbie-sprog
.... skal jeg
forstå
> > det således at den er god nok at bruge sålænge beregningerne ikke
> indeholder
> > negative tal?
>
> Du er altid velkommen til at spørge, hvis jeg udtrykker mig for kryptisk.
> Jeg vil meget gerne forsøge at forklare nærmere.
>
> ...og det er godt at du spørger, for det fik mig til at undersøge sagen
> nærmere!
>
> Der ER problemer med resultatet i nogle ganske bestemte tilfælde!!!
>
> Hermed en uforbeholden undskyldning til Carsten Jessen, idet jeg i den
grad
> ignorerede hans bemærkning om, at man skal være varsom med at bruge den
> pågældende metode: Du HAR HELT RET Carsten.
>
> Landet ligger således, at Val-funktionen altid returnerer et tal af typen
> Double, men undervejs til mellem-resulteter, kan den åbenbart godt finde
på
> at bruge andre datatyper, hvilket kan give nogle meget uheldige
resultater!
>
> 1. Hvis det hexadeciale tal holder sig indenfor 16 bit (dvs. 1 til 4
> hexadecimale cifre), konverteres tallet internt til en Integer, og
derefter
> returneres en Double.
> 2. Hvis det hexadecimale tal er større end 16 bit men mindre end en eller
> lig 32 bit (dvs. 5 til 8 hexadecimale cifre), konverteres internt til en
> Long og derefter til en Double.
> 3. Hvis det hexadecimale tal er større end 32 bit (dvs. mere end 8
> hexadecimale cifre), får man en "overflow" fejl.
>
> Nu er problemet, at en Integer kan indeholde positive tal fra 0 til 32767,
> hvilket hexadecimalt er &H0000 til &H7FFF.
> Hvis man prøver at konvertere værdier fra &H8000 til &HFFFF, opfattes det
> som negative tal fra -32768 til -1.
>
> Tilsvarende gælder for Long, at de kan indeholde positive tal fra 0 til
> 2147483647, hvilket hexadecimalt er &H00000000 til &H7FFFFFFF.
> Hvis man prøver at konvertere værdier fra &H80000000 til &HFFFFFFFF,
> opfattes det som negative tal fra -2147483648 til -1.
>
> ----------------------------------------------------
> Med andre ord, går følgende konverteringer godt:
> &H0 - &H7FFF og &H10000 - &H7FFFFFFF
>
> Hvorimod der kommer et negativt resultat i følgende tilfælde:
> &H8000 - &HFFFF og &H80000000 - &HFFFFFFFF
> ----------------------------------------------------
>
> DET ER IKKE GODT!
>
> I mange tilfælde må man sige, at Val ikke anvendelig til at konvertere
> hexadecimale tal.
>
> Brug i stedet den metode som Helge Bjørkhaug foreslog eller noget i
retning
> af nedenstående forslag:
>
> Function Hex2Dec(ByVal sHex As String) As Double
> Dim i As Long
> For i = 1 To Len(sHex)
> Hex2Dec = 16 * Hex2Dec + Val("&H" & Mid(sHex, i, 1))
> Next i
> End Function
>
> -------
> Tomas
>
>