String in Binärcode umwandeln

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich hab ein kleines Problem bei dem ich nicht weiter komme. Ich habe einen String mit Buchstaben und Zahlen und möchte diesen in Binärcode umwandeln, da der Binärcode dann bestimmte Zahlen (ID's) darstellt. Nur wiewandel ich den String in Binary um? Im Manual hab ich dazu keine Funktion gefunden.


Gruß Radhad
 
PHP:
function str2bin($str, $mode=0) {
    $out = false;
    for($a=0; $a < strlen($str); $a++) {
        $dec = ord(substr($str,$a,1));
        $bin = '';
        for($i=7; $i>=0; $i--) {
            if ( $dec >= pow(2, $i) ) {
                $bin .= "1";
                $dec -= pow(2, $i);
            } else {
                $bin .= "0";
            }
        }
        /* Default-mode */
        if ( $mode == 0 ) $out .= $bin;
        /* Human-mode (easy to read) */
        if ( $mode == 1 ) $out .= $bin . " ";
        /* Array-mode (easy to use) */
        if ( $mode == 2 ) $out[$a] = $bin;
    }
    return $out;
}

Die Funktion hab ich gefunden auf der Seite im PHP Manual für String Funktionen. Hatte sie mir damals rauskopiert, weil ich dachte, die ist bestimmt nochmal nützlich ;)
Hat meiner Meinung nach alles was man braucht.
 
Du könntest auch die unpack()-Funktion nutzen:
PHP:
$packed = unpack('C*', 'foobar');
array_walk($packed, create_function('&$var', 'return $var = (string) sprintf("%08b", $var);'));
var_dump(implode('', $packed));
 
In der Funktion muss irgendwie ein Fehler sein, denn der gleiche String mit einem Testprogramm in C# ergibt einen anderen Binärcode. Der Binärcode, der bei dieser Funktion rauskommt ist nicht richtig.
 
Kann das Problem damit zusammen hängen, dass der String ein Base64 String ist?

EDIT:
Ok, ich bin das ganze ja komplett falsch angegangen ^^ Ich muss zuerst den Base64 String decoden und dann in Binärcode umwandeln ^^
EDIT2:
base64_decode geht nicht, also muss ich wohl die Zeichen manuell austauschen, also A = 0, B = 1, C = 2 etc. - Wie könnte ich dies am besten machen?
 
Zuletzt bearbeitet:
Also der Base64 String sieht so aus:
OwpjMueWKPB4s9AGNf70fMQBA

Als Ausgabe sollte kommen:
011100000011100101110001001100011101011110011010010100111100100000000111001101101111000000011000101100111110110111001011111110001100000010100000000000
Bekomme aber
01001111011101110111000001101010010011010111010101100101010101110100101101010000010000100011010001110011001110010100000101000111010011100110011000110111001100000110011001001101010100010100001001000001

Da ich derzeit direkt Binär umwandle anstatt die Buchstaben den Zahlen zuordne (ich vermute daran hapert es derzeit noch)


Entsprechende RFC 3548
 
Für das Umwandeln würde ich [phpf]chr[/phpf] verwenden.

PHP:
$string = "0123"; # A B C D
$output = false;
for($i = 0; $i < strlen($string); $i++) {
	$output .= chr(substr($string, $i, 1) + 65);
}	

echo $output;
 
Ich hab jetzt hier 2 Arrays:
PHP:
$Base64_Encode = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/");
$Base64_Value = array("0", "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", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63");
Jetzt müsste ich die einzelnen Zeichen des Base64 codierten Strings austauschen mit den Zahlen aus den Array "Base64_Value".

Ich dachte an
PHP:
$str = str_replace($Base64_Encode, $Base64_Value, $str);
aber das klappt nicht.
 
PHP:
<?php
$str = 'OwpjMueWKPB4s9AGNf70fMQBA';

$Base64_Encode = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", 
"S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", 
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/");
$Base64_Value = array("0", "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", "33", "34", "35", 
"36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", 
"56", "57", "58", "59", "60", "61", "62", "63");

echo $str."<br/>";
echo str_replace($Base64_Encode, $Base64_Value, $str)."<br/>";
echo str_replace($Base64_Value, $Base64_Encode, $str);


?>

Die Ausgabe klappt bei mir ohne Probleme und er wandelt auch richtig zurück?
 
Zurück