Nou da's de vraag, hoe pak ik dit aan? Hoe converteer ik bijvoorbeeld (hex) #000080 naar een (long) value?
Verwijderd
Nou ken ik VB niet, maar ik denk dat er wel een functie als value = hextoint(hex_getal) standaard is meegeleverd.
Anders kan je natuurlijk altijd zelf ff zo'n functie in elkaar klussen:
Anders kan je natuurlijk altijd zelf ff zo'n functie in elkaar klussen:
code:
1
2
3
| dec_getal = (hex[0] * 16^0) + (hex[1] * 16^1) + ... + (hex[n-1] * 16^(n-1)) + (hex[n] * 16^n); // Let op: Het 0-de element is het minst significante (meest rechtse) element van het hex getal. We tellen dus van rechts naar links!!! |
Sorry, maar het lukt niet echt met de code hierboven, en ik vat em ook niet helemaal...
Dankjewel anyways
help still needed here
Dankjewel anyways
help still needed here
Verwijderd
De code slaat waarschijnlijk ook nergens op, maar als je zo een idee krijgt hoe het hex-getal in elkaar zet kan je met een beetje kennis van VB denk ik wel zelf een functie in elkaar zetten.
algemeen:
je hebt het waarschijnlijk als een stuk tekst?
Dan kan je dat heel simpel doen door bij het eerste karacter (na de #) te beginnen en te kijken of het een [0-9] of [A-F] is en de daarbij behorende waarde van [0-15] toe te voegen aan de long (die initieel nul is). Vervolgens ga je naar het volgende karakter, maar eerst vermenigvuldig je de long nog met 16 en daarna tel je daarna weer de overeenkomsige waarde in [0-15] er weer bij op. enz.
Een voorbeeld in C:
Het is niet getest, en waarschijnlijk lelijke code, maar misschien dat je er wat aan hebt.
Waar zijn trouwens de mensen op de VB en C code te benchmarken? Een assembler versie is er ook nog niet
je hebt het waarschijnlijk als een stuk tekst?
Dan kan je dat heel simpel doen door bij het eerste karacter (na de #) te beginnen en te kijken of het een [0-9] of [A-F] is en de daarbij behorende waarde van [0-15] toe te voegen aan de long (die initieel nul is). Vervolgens ga je naar het volgende karakter, maar eerst vermenigvuldig je de long nog met 16 en daarna tel je daarna weer de overeenkomsige waarde in [0-15] er weer bij op. enz.
Een voorbeeld in C:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| unsigned long int hex_to_ulong(const char *const text)
{
unsigned long result = 0; /* begin bij 0 */
const char *ptr;
register char c;
/* ptr is een pointer die straks alle letter af gaat */
ptr = (const char *) text;
if (ptr[0] != '#') /* miereneukmode: == (*ptr != '#') */
return 0; /* geen hexadecimaal getal */
/* ga naar de volgende letter */
ptr++;
for(;;)
{
/* sla de huidige letter op in c en laat de pointer naar de volgende letter wijzen */
c = *ptr++;
/* vermedigvuldig result met 16 */
result <<= 3;
if (c >= '0' && c <= '9')
result += c-'0'; /* truuckje in c, haal ascii waarde van c (dat in ['0'-'9'] zit) van de ascii waarde van '0' af, dat is dan het werkelijke nummer */
else if (c >= 'A' && c <= 'F')
result += 10 + c-'A'; /* zelfde truucje weer, let wel op de 10 */
else
break; /* string bevat geen ascii letters in de vorm van getallen meer */
}
return result;
} |
Het is niet getest, en waarschijnlijk lelijke code, maar misschien dat je er wat aan hebt.
edit:
Damn, tik je een keer je berichtje offline is in de tussentijd iemand je al voor
Damn, tik je een keer je berichtje offline is in de tussentijd iemand je al voor
Waar zijn trouwens de mensen op de VB en C code te benchmarken? Een assembler versie is er ook nog niet
putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]
Ja ik vind het wel leuk dat er allemaal code wordt ingestuurd, maar ff 2 dingen:
1.) Ik ben geen wiskunde wizzard
2.) Als je code hebt, stuur het dan in VB formaat
Danku, danku, danku
1.) Ik ben geen wiskunde wizzard
2.) Als je code hebt, stuur het dan in VB formaat
Danku, danku, danku
Het is geen VB maar wel ASP/VBSCRIPT
Dus hier moet je het zeker mee kunnen.....
Function HexToDecimal(pValue)
pValue=lcase(pValue)
For C = Len(pValue) To 1 Step -1
a=Mid(pValue, C, 1)
if isnumeric(a) then
CharVal = CInt(a)
else
CharVal = Asc(a) - 55
end if
Value = Value + ((16 ^ PosValue) * CharVal)
PosValue = PosValue + 1
Next
HexToDecimal = Value
End Function
Let op hij controleert niet of de waarde geldig is....
g = 17
Dus hier moet je het zeker mee kunnen.....
Function HexToDecimal(pValue)
pValue=lcase(pValue)
For C = Len(pValue) To 1 Step -1
a=Mid(pValue, C, 1)
if isnumeric(a) then
CharVal = CInt(a)
else
CharVal = Asc(a) - 55
end if
Value = Value + ((16 ^ PosValue) * CharVal)
PosValue = PosValue + 1
Next
HexToDecimal = Value
End Function
Let op hij controleert niet of de waarde geldig is....
g = 17
Programmer - an organism that turns coffee into software.
OK, VB cast em dan misschien wel automagisch, maar voor de netheid nog ff een Val() eromheen heOp maandag 24 september 2001 23:59 schreef Yarvieh het volgende:
WHoei!! niet zo moeilijk allemaal zeg!
code:
1 LngHex = "&H" & strHex
code:
1
2
3
| Dim DecVal As Long, HexVal As String
DecVal = Val("&H" & HexVal) |
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
Verwijderd
Val retouneerd een double dus nu krijgen we een cast van
string->double->long
en we hadden een cast van
string->long
Nu mag jij zeggen wat netter is
string->double->long
en we hadden een cast van
string->long
Nu mag jij zeggen wat netter is
lngHex=Clng("&h" & strHex)Op dinsdag 25 september 2001 00:11 schreef Yarvieh het volgende:
Nu mag jij zeggen wat netter is
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Op dinsdag 25 september 2001 00:24 schreef Yarvieh het volgende:
Gerco gaat door voor de kewlkast!
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Verwijderd
Als de string geen long is?Op dinsdag 25 september 2001 08:42 schreef Gerco het volgende:
Het is ook een string -> long cast, maar dan een explicite, die ook een error geeft als de string GEEN long is, ipv gewoon '0' te returnen.
Ja, dat bedoel ik inderdaad, klein foutje in mn uitdrukking, daar ben ik vaker niet zo goed inOp dinsdag 25 september 2001 08:57 schreef Yarvieh het volgende:
Als de string geen long is? Das like alitjd toch? je bedoeld waarschijnlijk als "&h" & strhex niet naar een long te evalueren is? ... maar zowel met als zonder expliciete cast geeft ie 'n type mismatch error dan
Nee, dan geeft 'ie 0, probeer maar debug.print val("blaat") en debug.print clng("blaat"), CLng() geeft een error, Val() geeft '0'
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Verwijderd
Misschien zie ik het verkeerd maar..
zonder cast: lngHex = "&h" & strHex
Met cast : lngHex = val( "&h" & strHex) , lngHex = clng( "&h" & strHex)
zonder cast: lngHex = "&h" & strHex
Met cast : lngHex = val( "&h" & strHex) , lngHex = clng( "&h" & strHex)
Misschien begrijp ik je verkeerd, ik bedoel:Op dinsdag 25 september 2001 10:06 schreef Yarvieh het volgende:
Misschien zie ik het verkeerd maar..
code:
1
2
3
4
5
6
7
| dim lngHex as Long dim strHex as String strHex = "&H" & "blaat" lngHex = strHex ' Geeft 0 lngHex = val(strHex) ' Geeft 0 lngHex = clng(strHex) ' Geeft Type mismatch |
Dat bedoel ik, maar als je er natuurlijk een goede "&hFF" ofzo instopt, werken ze allemaal even goed, maar toch vind ik de laatste netter, explicite cast MET error als je er een verkeerde waarde inpropt.
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Val geeft geen double, Val kijkt welk type verwacht wordtOp dinsdag 25 september 2001 00:11 schreef Yarvieh het volgende:
Val retouneerd een double dus nu krijgen we een cast van
string->double->long
en we hadden een cast van
string->long
Nu mag jij zeggen wat netter is
Dus jaMSDN zegt:
Val Function
Returns the numbers contained in a string as a numeric value of appropriate type.
[...]
Remarks
The Val function stops reading the string at the first character it can't recognize as part of a number.
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
Verwijderd
Open vb es en typ val( dan krijg je een popupjeOp dinsdag 25 september 2001 11:57 schreef johnwoo het volgende:
Val geeft geen double, Val kijkt welk type verwacht wordt
"Val(String as String) as Double"
Mocht je nog niet overtuigd zijn doe dan 'n
msgbox typename(val("1234"))
Whoeii weer een double..
Goed omdat vb ook wel snapt dat ie geen double in een long kwijt kan zal ie 'm alsnog voor je naar long casten maar dat is niet het werk van val da doet de vb runtime voor je.
Nou ja, mijn fout. Maar toch vind ik het netter om CLng() te gebruiken, bij wijze van expliciete cast. Maar ik ben er zoeen die in C ook altijd expliciet de primitieve typen naar elkaar cast.Op dinsdag 25 september 2001 10:58 schreef Yarvieh het volgende:
code:
1 lngHex = strHex ' Geeft 0
Incorrect geeft type mismatch.
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Pagina: 1