Ik ben voor mijn wiskunde kennis wat grappige en ingewikkelde functies aan het bouwen. (Word ook mijn inzicht wat beter) Maar ik loop vast.
Wat ben ik aan het bouwen?
Een converter die,door punt gescheiden waardes van 0 tot 255, een hexadecimale string bouwd. Ik wil dus bereiken als je 255.255.255 invoerd, dat je FFFFFF terug krijgt. Nu is hier een php functie voor, dat weet ik.. Maar ik wil het zelf eens bouwen.
Ik heb nu dit:
Maar ik kom niet verder. Mijn probleem is alsvolgt. Ik weet niet hoe ik moet terugrekenen. Stel ik prop er 255 in, dan weet ik dat dit FF is, maar hoe BEREKEN ik dit. (ook voor andere waarden natuurlijk).
lezen blijft moeilijk hè...rnrndie 1e gebruikt de standaard php functie(s) en de 2e knipt alleen een string in drieën en gebruikt inval() om ong. hetzelfde te doen als hexdec().rnDan doe je dus nog niks zelf.rnrnHet lijkt erop dat je gewoon uit je hoofd geleerd hebt dat 255 == FF, maar dat je niet echt weet hoe je van hexadecimaal naar decimaal rekent. ff google gebruiken en dan hoef je alleen maar een paar rekensommetjes in je script te zetten.rnVervolgens een array gebruiken om de getallen 10 en hoger om te zetten naar letters en je bent klaar.rnrnEdit typornrnEdit2rn[quote]edit die 2e. sorry[quote] Ik dacht dat je het zelf wilde doen.... rnrnEdit3rn[quote]Die had ik al, maar ik wil andersom ;)[quote] Na het lezen van je edit blijkt dat dat dus over dat 1e script gaat, maar die doet (ong) hetzelfde als dat 2e en bij allebei doe je het dus niet zelf...
Ik loop even in het niets. Ik weet wel wat hexadecimaal is hoor ) Maar jullie snappen me verkeerd geloof ik. Ik wil niet van hexadecimaal naar decimaal, maar van decimaal naar hexadecimaal
het getal delen door zestien, het geheel gedeelte is het eerste deel van het hexadeciamale getal, de rest het tweede.rnrn2716 = 1 en rest 11, dus hexadecimaal wordt dit 1B.rnrnde rest ve deling kan je bijvoorbeeld berekenen door [ (2716)-floor(2716) ]16 te doenrnwil je ook de floor functie niet gebruiken, dan kun je 2716 in een loopje zetten waarin je telkens -1 aftrekt tot je een getal tussen 0 en 1 krijgt, het aantal loops kan je dan gebruiken als de gehele deel. De rest door weer met 16 te vermenigvuldigen.rnrnvoor iedereen anders, gebruik maar de snelle ingebouwde functies
Hmm, ik was al ongeveer zo ver gekomen met het forum waar ik moderator ben..rnrnHier mijn laatste postrnrnHmm oke, vertalen naar php is half gelukt P Eerst denk ik stop ik alles in een array, maar dat werkt niet. Nu heb ik maar met veel i'tjes gewerkt, sorry dat het beetje onoverzichtelijk is.rn[code]rnrnfunction rgb2hex ($str,$methekje=FALSE)rn{rn $waardes = explode(.,$str);rn if (!is_numeric($waardes[0]) OR !is_numeric($waardes[1]) OR !is_numeric($waardes[2]))rn {rn die (niet numeriek); only for debuggingrn RETURN FALSE;rn }rn elsern {rn rn $getallen = array(0,1,2,4,5,6,7,8,9,A,B,C,D,E,F);rn $output='';rn foreach($waardes as $key = $value)rn {rn $ii = $value-16;rn $iii = $ii16;rn $iiii = ceil($iii);rn $eerste = $getallen[$iii];rn $iiiii = $iiii16;rn $iiiiii = $value - $iiiii;rn $tweede = $getallen[$iiiiii];rn $output .= $eerste.$tweede; rn }rn rn }rn if ($methekje)rn {rn $output = #.$output;rn }rn RETURN $output; rn}rnecho rgb2hex(255.255.0,TRUE);rnrnoutput #FFrn[code]rnDe foreach lus word wél 3x uitgevoerd, want als ik er een echo in zet, krijg ik em 3x
Oke, ik ben nu weer wat verder.. rnrnIk heb nu de volgende functiern[code]rnrnfunction rgb2hex ($str,$methekje=FALSE)rn{rn $waardes = explode(.,$str);rn if (!is_numeric($waardes[0]) OR !is_numeric($waardes[1]) OR !is_numeric($waardes[2]))rn {rn die (niet numeriek); only for debuggingrn RETURN FALSE;rn }rn elsern {rn rn $getallen = array(0,1,2,4,5,6,7,8,9,A,B,C,D,E,F,F);rn $output=array();rn foreach($waardes as $key = $value)rn {rn $a = $value-16;rn $b = $a16;rn $c = ceil($b);rn $eerste = $getallen[$c];rn $d = $c16;rn $e = $value - $d;rn $tweede = $getallen[$e];rn $output[$key]= $eerste.$tweede; rn }rn rn }rn rn $output=$output[0].$output[1].$output[2];rn rn if ($methekje)rn {rn $output = #.$output;rn }rn RETURN $output; rn}rnecho rgb2hex(92.149.206,TRUE);rnoutput #6DA6DF Volgens Photoshop #5C95CErnrn[code]rnJe ziet dat ik in de array een extra F heb staan. Anders is er maar een enkele F. Voor debuggen maak ik er X of Q van ofzo, maar dat doet er niet toe. Hoewat moet ik nu veranderen dat die beetje goed werkt is dat met ceil fout danrnDit
$a = $value-16;rn $b = $a16;rn $c = ceil($b);rnrndoe toch gewoon rn $c = floor($value16);rnrnhmm, photoshop komt blijkbaar telkens een getal lager dan jij uit, waarom doe jij toch zo in het begin -16. en die laatste F is echt niet nodig, je zal nooit het zestiende getal uit je array nodig hebben, enkel het vijftiende, heb jiij dit wel, dan ligt het aan dat ceil gedeelte.
Ik ben nu met een nieuwe functie aan het bouwen, met de zelfde reden )rnmaar ik snap niet waarom ik in dit beginstadium nog geen fatsoenlijke output krijgrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $int{$i};rn }rn rn print_r($all_int);rn }rn}rnbin2dec(101);rnrn[code]rnOutputrnrnArrayrn(rn [0] = rn [1] = rn [2] = rn)rnrnrnrnDan gebruik ik dus {$i} en ik denk dat daar de fout ligt. Ik wil dus gewoon een stukje string pakken, maar het is een integer.. Moet ik dit eerst om zetten(en hoe) en waarom werkt het anders nietrnrnedit, het ligt dus aan dat het geen string is maar een int, dit zegt genoegrn[code]rnrn$string = 101010;rnecho $string{4};rnoutput 1rnrn$integer = 101010;rnecho $integer{4};rngeen outputrnrn[code]rnrnWeer edit, ik heb al wat gevonden, maar hij doet nog niet veel anders, ik heb nu ditrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn $string = settype($int,string);rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $string{$i};rn }rn rn print_r($all_int);rn }rn}rnrn[code]rnrnLaat maar ^^ rnJe settype geeft TRUE of FALSE terug, dus dat was mijn fout, het moet dus zo zijnrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn settype($int,string);rn $string = $int;rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $string{$i};rn }rn rn print_r($all_int);rn $aantal = count($all_int);rn }rn}rnbin2dec(101);rnrn[code]rnrnMoet ik vaker doen, heletijd posten en het alsnog zelf oplossen
Oke, ik heb alles inmiddels af en werkend, zit nu alleen met een volgend probleem. Als ik er een binaire reeks van 11 of meer in stop, dan krijg ik niets meer terug. Dus 10 keer een 1 is het maximaal haalbare (decimaal is dat 1023). Waar licht dit aan Dit is mijn functiern[code]rnrnfunction is_bin ($bin)rn{rn nog bouwen!rn rn if (ereg([0-1],$bin))rn RETURN is_int($bin); tijdelijk..rn rn}rnfunction bin2dec($int)rn{rn if(!is_bin($int)) Check if the input string binair isrn {rn RETURN FALSE;rn }rn else if binairrn {rn settype($int,string); make integer a stringrn $string = $int; rn $string = strrev($string); reverse stringrn $lengte = strlen($int); get lenght of stringrn $all_int = array(); define arra for all valuesrn rn for ($i=0;$i$lengte;$i++) loop throuw every charrn {rn $all_int[$i] = $string{$i}; put all chars in arrayrn }rn rn $new_all_int = array(); define new arrayrn foreach ($all_int as $key = $value) loop through new arrayrn {rn $new_all_int[$key+1] = $value; put the key one higher, else we cannot powrn }rn rn $total = 0; start total with 0rn $aantal_keer = 1;rn foreach($new_all_int as $key = $value) count each charrn {rn if ($key == 1) if the key was onern {rn if ($value == 1) and it is set (value = 1)rn {rn $total++; plus onern }rn }rn elseif ($key == 2) if the there is a second characterrn {rn if ($value == 1) and the second character is set (value = 1)rn { rn $total=$total+2; plus tworn }rn }rn else for every other characterrn {rn if ($value == 1) if it is set(value = 1)rn { rn $total = $total+$aantal_keer;total+number of stringcharrn }rn }rn $aantal_keer = $aantal_keer2;rn }rn RETURN $total; return everythingrn }rn}rnrn[code]