/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Hexadecimal tal.
Fra : Sune@lithium.dk


Dato : 17-08-01 13:42

Hejsa folkens..

Kan nogen fortælle mig om der findes en modsætning i vb til Hex()
funktionen. Jeg har en række tal som hexadecimal, og kunne godt tænke mig at
få dem lavet om til good old 10-talssystem tal Hex() gør det
tilsyneladende kun den anden vej. Er der en indbygget funktion? eller skal
jeg undersøge formlen for konvertering mellem to talsystemer?


- Sune



 
 
Rayman (17-08-2001)
Kommentar
Fra : Rayman


Dato : 17-08-01 16:35

Ja. Val() :)

Hvis du sætter "&h" foran tallet blivet det betragtet som Hex Tal. Så
Val("&h"& lHexVal) giver resultat'et i decimal..
<Sune@lithium.dk> wrote in message
news:3b7d1119$0$9446$4d4eb98e@news.dk.uu.net...
> Hejsa folkens..
>
> Kan nogen fortælle mig om der findes en modsætning i vb til Hex()
> funktionen. Jeg har en række tal som hexadecimal, og kunne godt tænke mig
at
> få dem lavet om til good old 10-talssystem tal Hex() gør det
> tilsyneladende kun den anden vej. Er der en indbygget funktion? eller skal
> jeg undersøge formlen for konvertering mellem to talsystemer?
>
>
> - Sune
>
>



Carsten Jessen (17-08-2001)
Kommentar
Fra : Carsten Jessen


Dato : 17-08-01 17:36

Som det har været diskuteret tidligere i gruppen skal man være varsom med et
bruge Val til at løse problemet.

Prøv følgende:
Private Sub Command1_Click()

Print Val("&H" & Hex(40000))

End Sub

Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi Val
tager 2-kompliment til tallet.
Hvis du er sikker på at dine hex-værdier er under 32767 (integer) er
ovenstående ikke noget problem, hvis dine værdier overstiger 32767, skal du
lave en funktion selv.

Under sidste diskussion kom der flere virkelige elegante forslag.

MVH Carsten

"Rayman" <rayman_dk@email.com> skrev i en meddelelse
news:5Taf7.160$XT1.8077@news.get2net.dk...
> Ja. Val() :)
>
> Hvis du sætter "&h" foran tallet blivet det betragtet som Hex Tal. Så
> Val("&h"& lHexVal) giver resultat'et i decimal..
> <Sune@lithium.dk> wrote in message
> news:3b7d1119$0$9446$4d4eb98e@news.dk.uu.net...
> > Hejsa folkens..
> >
> > Kan nogen fortælle mig om der findes en modsætning i vb til Hex()
> > funktionen. Jeg har en række tal som hexadecimal, og kunne godt tænke
mig
> at
> > få dem lavet om til good old 10-talssystem tal Hex() gør det
> > tilsyneladende kun den anden vej. Er der en indbygget funktion? eller
skal
> > jeg undersøge formlen for konvertering mellem to talsystemer?
> >
> >
> > - Sune
> >
> >
>
>



Bjarke Walling Peter~ (17-08-2001)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 17-08-01 18:27

Carsten Jessen skrev:
> Som det har været diskuteret tidligere i gruppen skal man være varsom med
et
> bruge Val til at løse problemet.
>
> Prøv følgende:
> Private Sub Command1_Click()
>
> Print Val("&H" & Hex(40000))
>
> End Sub
>
> Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi Val
> tager 2-kompliment til tallet.
> Hvis du er sikker på at dine hex-værdier er under 32767 (integer) er
> ovenstående ikke noget problem, hvis dine værdier overstiger 32767, skal
du
> lave en funktion selv.
>
> Under sidste diskussion kom der flere virkelige elegante forslag.

F.eks. det her...

Debug.Print CLng("&H" & Hex$(40000))

Her er området: -2.147.483.648 til 2.147.483.647

Elegant ikke?

- Bjarke Walling Petersen



Carsten Jessen (17-08-2001)
Kommentar
Fra : Carsten Jessen


Dato : 17-08-01 20:43

Det må siges at være rimeligt elegant

MVH Carsten

"Bjarke Walling Petersen" <bwp@bwp.dk> skrev i en meddelelse
news:9ljk2l$1p0r$2@news.cybercity.dk...
> Carsten Jessen skrev:
> > Som det har været diskuteret tidligere i gruppen skal man være varsom
med
> et
> > bruge Val til at løse problemet.
> >
> > Prøv følgende:
> > Private Sub Command1_Click()
> >
> > Print Val("&H" & Hex(40000))
> >
> > End Sub
> >
> > Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi
Val
> > tager 2-kompliment til tallet.
> > Hvis du er sikker på at dine hex-værdier er under 32767 (integer) er
> > ovenstående ikke noget problem, hvis dine værdier overstiger 32767, skal
> du
> > lave en funktion selv.
> >
> > Under sidste diskussion kom der flere virkelige elegante forslag.
>
> F.eks. det her...
>
> Debug.Print CLng("&H" & Hex$(40000))
>
> Her er området: -2.147.483.648 til 2.147.483.647
>
> Elegant ikke?
>
> - Bjarke Walling Petersen
>
>



Sune Gynthersen (18-08-2001)
Kommentar
Fra : Sune Gynthersen


Dato : 18-08-01 12:43

Det spiller 100 procent

Tak for hjælpen.

- Sune

"Bjarke Walling Petersen" <bwp@bwp.dk> wrote in message
news:9ljk2l$1p0r$2@news.cybercity.dk...
> Carsten Jessen skrev:
> > Som det har været diskuteret tidligere i gruppen skal man være varsom
med
> et
> > bruge Val til at løse problemet.
> >
> > Prøv følgende:
> > Private Sub Command1_Click()
> >
> > Print Val("&H" & Hex(40000))
> >
> > End Sub
> >
> > Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi
Val
> > tager 2-kompliment til tallet.
> > Hvis du er sikker på at dine hex-værdier er under 32767 (integer) er
> > ovenstående ikke noget problem, hvis dine værdier overstiger 32767, skal
> du
> > lave en funktion selv.
> >
> > Under sidste diskussion kom der flere virkelige elegante forslag.
>
> F.eks. det her...
>
> Debug.Print CLng("&H" & Hex$(40000))
>
> Her er området: -2.147.483.648 til 2.147.483.647
>
> Elegant ikke?
>
> - Bjarke Walling Petersen
>
>



Tomas Christiansen (21-08-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 21-08-01 23:32

Bjarke Walling Petersen skrev:
> Debug.Print CLng("&H" & Hex$(40000))
>
> Her er området: -2.147.483.648 til 2.147.483.647
>
> Elegant ikke?

Nemligså!

Og hvis man ønsker at flytte området til i stedet at dække 0 til
4.294.967.295, kan man bruge følgende:

Function Hex2Dec(ByVal sHex As String) As Double
Dim Resultat As Long
Resultat = CLng("&H" & sHex)
If Resultat >= 0 Then
Hex2Dec = Resultat
Else
Hex2Dec = 2 ^ 31 + (Resultat And &H7FFFFFFF)
End If
End Function

-------
Tomas


cr (17-08-2001)
Kommentar
Fra : cr


Dato : 17-08-01 18:47


"Carsten Jessen" <c.je@get2net.dk> wrote in message
news:3b7d480f$0$31244$ba624c82@nntp01.dk.telia.net...
> Som det har været diskuteret tidligere i gruppen skal man være varsom
med et
> bruge Val til at løse problemet.
>
> Prøv følgende:
> Private Sub Command1_Click()
>
> Print Val("&H" & Hex(40000))
>
> End Sub
>
> Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi
Val
> tager 2-kompliment til tallet.

Du mener vel at den omsætter integer med fortegn, det er heller ikke en
kompliment at rette på nogen.
2-komplement er at med forten negere og trække 1 fra resultatet.





Carsten Jessen (17-08-2001)
Kommentar
Fra : Carsten Jessen


Dato : 17-08-01 20:26

Jeg skal sige jeg ikke er helt på hjemmebane, men 2-komplement er ifølge det
jeg har fået forklaret: at "vende op og ned" på hex-tallet (0 -> F, 1 -> E
osv.), bagefter trække 1 fra og til sidst sætte et minus på tallet, dvs.

Hex(40000) = 9C40 bliver til 63BF
minus 1 --------------------> 63C0 --> Val("&H63C0") = 25536
nyt fortegn -----------------> -25536 præcis som Val fik.

Det kan godt være dette ikke er 2-komplement, men det er det Val gør

MVH Carsten



"cr" <a@b.dk> skrev i en meddelelse news:9ljl98$pdc$1@sunsite.dk...
>
> "Carsten Jessen" <c.je@get2net.dk> wrote in message
> news:3b7d480f$0$31244$ba624c82@nntp01.dk.telia.net...
> > Som det har været diskuteret tidligere i gruppen skal man være varsom
> med et
> > bruge Val til at løse problemet.
> >
> > Prøv følgende:
> > Private Sub Command1_Click()
> >
> > Print Val("&H" & Hex(40000))
> >
> > End Sub
> >
> > Hovsa. Dette regnestykke burde give 40000, men det giver -25536 fordi
> Val
> > tager 2-kompliment til tallet.
>
> Du mener vel at den omsætter integer med fortegn, det er heller ikke en
> kompliment at rette på nogen.
> 2-komplement er at med forten negere og trække 1 fra resultatet.
>
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste