[PHP]Probleempje met (binary) string converteren naar dec

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
Voor een planningsmodule hebben we een klein probleempje met het converten van een binary string naar een decimal.

Hierbij eerst de code

PHP:
1
2
3
4
5
6
7
8
9
10
11
    for($i=0; $i <= 6; $i++)
            {
                if($_POST['aDays'][$i] == 'on')
                    $sBinaryString .= 1;
                else
                    $sBinaryString .= 0;
            }
            
            
            echo $sBinaryString;
            echo bindec($sBinaryString);


Als de variable $sBinaryString 1000010 is werkt deze string perfect. De string $sBinaryString geeft aan welke dagen de commercial moet draaien. In dit geval dus maandag en zaterdag. Als ik nu alleen zaterdag wil selecteren krijg ik als string 0000010, maar de functie bindec() leest deze string als 10 en maakt er dus twee van met als gevolg dat de planning denkt dat maandag ingepland is.

Kortom hij verwijdert de leading zero's. Hoe kan ik dit voorkomen? Ik heb al wat rondgeneuzeld maar geen oplossing gevonden.

Bij voorbaat dank...

Acties:
  • 0 Henk 'm!

  • MacWebber
  • Registratie: September 2000
  • Niet online
Het is al weer een paar jaar geleden dat ik voor het laatst met nullen en enen speelde, maar 0000010 is toch ook 2?

Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 21-09 15:16
0000010 = binair 2. Dit klopt volgens mij exact. Wat is je probleem nu precies? Als je 2 weer omzet in 7 bits krijg je weer netjes 0000010. De leading zero's kun je niet echt opslaan in een getal, deze zul je weer moeten reconstrueren.

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Of je moet het als een string opslaan.

Acties:
  • 0 Henk 'm!

Verwijderd

...de functie bindec() leest deze string als 10 en maakt er dus twee van met als gevolg dat de planning denkt dat maandag ingepland is.
je maakt hier een denkfout, 2 is geen maandag maar zaterdag

maandag = 64 = 1000000
dinsdag = 32 = 0100000
woensdag = 16 = 0010000
donderdag = 8 = 0001000
vrijdag = 4 = 0000100
zaterdag = 2 = 0000010
zondag = 1 = 0000001

Acties:
  • 0 Henk 'm!

  • pderaaij
  • Registratie: Oktober 2005
  • Laatst online: 18-08 20:16
En daar kwamen wij dus nu ook net achter. Ik draai nu dus eerst de string om voordat hij de functie ingaat en een bepaalde volgorde klopt niet. Dus nu hebben we het probleem getackeld zo als het er uit ziet.

Bedankt voor jullie hulp allemaal!

Verwijderd

ja kan ook ipv i van 0 naar 6 laten lopen van 6 naar 0 laten lopen, hoef je niet de string eerst om te draaien

Verwijderd

Kun je er niet gewoon nog een 1 voorzetten, die je vervolgens altijd negeert, een soort van sign bit zeg maar.
Pagina: 1