Ik ben wat aan het stoeien met php (heb geen intentie/illusie om een echte programmeur te lijken). Nu probeer ik naar mijn idee iets vrij simpels: namelijk de /xx ip-subnetmask notatie omzetten naar dotted decimal (/23 -> 255.255.254.0). Ik heb daarvoor eerst het volgende bedacht:
al lezende in het boek kwam ik achter een andere methode, die me simpeler leek, maar waarvan ik niet weet of die ook 'beter' is:
Nu heb ik een 32 tekens lange string met eentjes en nulletjes, die ik in 4 stukken van 8 bits wil, dus:
Werkt allemaal prima, maar nu vond ik dat laatste niet zo heel mooi, dus ik zit nu te kijken naar een andere manier om die 32 tekens om te zetten.
Hiermee krijg ik netjes de 1'en en 0'en gescheiden met een . maar ik wil de decimale notatie, dus probeer ik
Warning: Wrong parameter count for substr() in \includes\functions.php on line 21
Warning: implode() [function.implode]: Bad arguments. in :\includes\functions.php on line 21
Ik wil dit eigenlijk oplossen zonder loop, maar ik kom er niet uit. Zit ik dan toch aan een loop vast om de arraywaardes om te zetten?
PHP:
1
2
3
4
5
6
7
8
9
10
| //Change subnetmask from /xx to aaa.bbb.ccc.ddd notation where xx=$a $tmpbin=""; //make 32-bit binary from $a for ($i=1; $i<=$a; $i++) { $tmpbin .= "1"; } for ($j=1; $j<=(32-$a); $j++) { $tmpbin .= "0"; } |
al lezende in het boek kwam ik achter een andere methode, die me simpeler leek, maar waarvan ik niet weet of die ook 'beter' is:
PHP:
1
2
| $tmpbin = str_pad("", $a, '1', STR_PAD_LEFT); $tmpbin = str_pad($tmpbin, 32, '0', STR_PAD_RIGHT); |
Nu heb ik een 32 tekens lange string met eentjes en nulletjes, die ik in 4 stukken van 8 bits wil, dus:
PHP:
1
2
3
4
5
6
7
| //split 32-bit in 4 decimal segments $sub1 = bindec(substr($tmpbin, 0, 8)); $sub2 = bindec(substr($tmpbin, 8, 8)); $sub3 = bindec(substr($tmpbin, 16, 8)); $sub4 = bindec(substr($tmpbin, 24, 8)); $tmpstr = "{$sub1}.{$sub2}.{$sub3}.{$sub4}"; |
Werkt allemaal prima, maar nu vond ik dat laatste niet zo heel mooi, dus ik zit nu te kijken naar een andere manier om die 32 tekens om te zetten.
PHP:
1
2
| //split into array, then implode making dotted notation $tmpstr = implode(".", (str_split($tmpbin, 8))); |
Hiermee krijg ik netjes de 1'en en 0'en gescheiden met een . maar ik wil de decimale notatie, dus probeer ik
PHP:
geeft alleen een fout:1
| $tmpstr = implode(".", bindec((str_split($tmpbin, 8)))); |
Warning: Wrong parameter count for substr() in \includes\functions.php on line 21
Warning: implode() [function.implode]: Bad arguments. in :\includes\functions.php on line 21
Ik wil dit eigenlijk oplossen zonder loop, maar ik kom er niet uit. Zit ik dan toch aan een loop vast om de arraywaardes om te zetten?
#team_UTC+1
An investment in knowledge always pays the best interest - Benjamin Franklin
You can call me McOverloper Mini '12 i7/16/256 Air '13 i5/8/256 iPad mini 5 64GB iPhone SE 128GB