Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Mit PHP von dezimal nach binär rechnen

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65

    Mit PHP von dezimal nach binär rechnen

    $Bin = 10011001;

    hallo habe folgende frage:

    habe ein script geschrieben, welches eigentlich von dezimal zahlen nach binärzahlen rechnen sollte ... nur es kommen immer falsche werte raus

    PHP-Code:
    for ($i=0;$i strlen($Bin);$i++) {
        
        echo 
    $Dez pow(($Bin[i] * 2),$i)." ";
         
         

    so sollte ja eigentlich die berechnung laufen ..

    1·2 hoch 0 + 0·2 hoch 1 + 0·2 hoch 2 + 1·2 hoch 3 + 1·2 hoch 4 + 0·2 hoch 5 + 0·2 hoch6 + 1·2 hoch 7 = 1 + 0 + 0 + 8 + 16 + 0 + 0 + 128 = 153
    hoffe es kann mir wer da helfen ...
    dieses skript zählt die ergebnise noch nicht zusammen sondern gibt sie einfach mit einer leerzeile dazwischen aus .. jedoch stimmen die nicht überein ..
    wenn ich echo $Bin[i] mache in der for schleife bekomm ich nur 11111111 obwohl mein $Bin ja 10011001 ist;

    danke

    michael
    Open Source, Open Mind

    MTS-FORUM

  2. #2
    Registrierter Benutzer
    Registriert seit
    30.06.1999
    Ort
    Jena
    Beiträge
    29
    Hi,

    wie wär's mal mit bindec()?

    Description
    int bindec ( string binary_string)

    Returns the decimal equivalent of the binary number represented by the binary_string argument.

    bindec() converts a binary number to an integer. The largest number that can be converted is 31 bits of 1's or 2147483647 in decimal.

    See also the decbin() function.

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65
    ja danke, ich kenne die funktion, aber ich wollte sowas vom anfang an programmierern , die funktionsweise selbst herausfinden und in einem eigenen code umsetzen .. nur leider kommt immer die falsche dez. zahl raus ..

    mfg
    Michael
    Open Source, Open Mind

    MTS-FORUM

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65
    habe den fehler nun gefunden ..
    habe aber eine frage:
    wie addiere ich die werte die mir in der variable $Dez entstehen ?

    PHP-Code:

    for ($i=0;$i strlen($Bin);$i++) { 

        
    /* Example: $Bin = 1001;
        * 1*2 ^0 + 0*2 ^1 + 0*2^2 + 1*2^3 = 1 + 0 + 0 + 8 = 9
        */
        
        
    $Dez pow(($Bin[$i] * 2),$i);    
        

    Danke Michael
    Open Source, Open Mind

    MTS-FORUM

  5. #5
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65
    tja .. leider ist die funktion falsch wie ich grade draufgekommen bin,
    sie ist nur bei 9 richtig
    hoffe es hat wer eine anregung für mich

    mfg
    Michael
    Open Source, Open Mind

    MTS-FORUM

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.11.2002
    Ort
    Dallmin
    Beiträge
    17
    Ich habe zwar kaum Ahnung von PHP, aber hier handelt es sich ja eher um ein Logikproblem.
    Wenn mich mein Gehirn also jetzt nicht ganz und gar verscheißert, sollte das hier funktionieren:

    PHP-Code:
    $Dez=0;
    for (
    $i=1;$i <= strlen($Bin);$i++) 

            
    $Dez=pow(pow($i2),$Bin[$i-1])+$Dez

    Hierbei allerdings noch die Frage, in welcher Reihenfolge stehen die Werte in deinem Binärstring?
    "There are two major products
    that come out of Berkeley: LSD
    and UNIX. We don't believe this
    to be a coincidence." - Jeremy S.
    Anderson

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65
    deine berechnung liefert leider auch falsche werte ..
    Open Source, Open Mind

    MTS-FORUM

  8. #8
    Registrierter Benutzer
    Registriert seit
    28.11.2002
    Ort
    Dallmin
    Beiträge
    17
    Jupp, ich habs mittlerweile getestet und das auch festgestellt, sorry. Mein Gehirn hat mich doch verscheißert, kann ja mal vorkommen.

    Aber hier ist jetzt eine die funktioniert, zumindest bei mir.

    PHP-Code:
    $Bin="11111";
    $Dez=0;
    for (
    $i=strlen($Bin)-1$i>=0$i--) 

            
    $Dez=(pow(2strlen($Bin)-1-$i)*(int)substr($Bin$i,1))+$Dez;
    }
    echo 
    $Dez
    Ich bin zwar von meinem Werk noch nicht so ganz begeistert, aber es kommen zumindest richtige Ergebnisse raus.
    "There are two major products
    that come out of Berkeley: LSD
    and UNIX. We don't believe this
    to be a coincidence." - Jeremy S.
    Anderson

  9. #9
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Ort
    Wien
    Beiträge
    65
    danke für deine mühe .. war echt schon nahe am pc aus dem fenster werfen, denn mir ist nachwievor nicht klar was an meiner obigen lösung falsch ist leider ...

    mfg
    Michael
    Open Source, Open Mind

    MTS-FORUM

  10. #10
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Ich glaube falsch ist

    PHP-Code:
    $Bin[$i]; 
    Das gibs in PHP nicht, wenn dann:

    PHP-Code:
    $Bin{$i}; 
    Dein code @nickers: Kann man auch so vereinfachen:

    PHP-Code:
    $Bin "1010101";
    $Dez 0;

    for (
    $i 0$i strlen($Bin) - 1$i++) {
         
    $Dez += pow(substr($Bin$i1) * 2$i);
    }
    echo 
    $Dez
    Denke das sollte gehen. Wenn man will muss, man natürlich den String vorher umdrehen, vom prinzip her, sollte es s auch gehen.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •