String in Binärcode umwandeln

Ja das schon, er wandelt es richtig zurück, nur ist O = 14 (der erste Buchstabe im String) und die ersten Zahlen sind 5561 ^^ Das kann ja nicht richtig sein.

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/>";
for($i = 0; $i < strlen($str); $i++)
{
	echo substr($str, $i, 1)." = ".str_replace($Base64_Encode, $Base64_Value, substr($str, $i, 1))."<br>";
}
echo str_replace($Base64_Value, $Base64_Encode, $str);
Da kann man es selber sehen, O ist nicht 14 sondern 5561556155615561560. Ich brauch aber die 14 ^^
 
Zuletzt bearbeitet:
Keine Ahnung warum str_replace so reagiert in diesem Fall, aber so funktioniert es.

PHP:
$test = false;
$Base64_Enc = array_flip($Base64_Encode);
for($i = 0; $i < strlen($str); $i++) {
	echo $str{$i}."-";
	echo $Base64_Enc[$str{$i}]."<br/>";
	#$test .= $Base64_Enc[$str{$i}];
}
 
Scheinbar kommt die str_replace nicht so ganz damit klar das der string länger wird und ersetzt mehrfach. So funktioniert es zumindest:

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");

$Encode = array_combine($Base64_Encode, $Base64_Value);

for($i = 0; $i < strlen($str); $i++)
{
    $new_str  .= $Encode[$str{$i}];    
}
echo $new_str;


Eine andere frage: Kannst du das überhaupt noch zurückkonvertieren? Woher soll er 1 - 1 (eins eins also BB) von 11 (elf also L) unterscheiden? währe da 01 nicht besser?
 
Zuletzt bearbeitet:
Cool, so hat es wunderbar geklappt. Ist zwra decodieren statt encodieren, aber ok ;)

Dann müsste ich bei deinem Beispiel
PHP:
$Encode = array_combine($Base64_Encode, $Base64_Value);
in
PHP:
$Encode = array_combine($Base64_Value, $Base64_Encode);
um es wieder umzuwandeln, oder? Ich versuch das mal ;)

[EDIT]
Ne, so geht's nicht... Die Rückwandlung ist schwierig, da müsste ich wohl über die Binärzahlen gehen. Kann ich den auch noch "zwingen" dass jede Zahl 8-Stellig ist (also 8 Bit sollen dargestellt werden).
 
Zuletzt bearbeitet:
Genau das wollte ich bemängeln oben bei deiner Ausgabe ,)

die SOLL ist mit verschieden vielen stellen immer wieder, also irgendwas scheint da wohl auch noch absolut nicht zu stimmen, aber aus dem PHP raus immer 8 stellig währe das:


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");

$Encode = array_combine($Base64_Encode, $Base64_Value);

for($i = 0; $i < strlen($str); $i++)
{
    $new_str  .= str_pad(decbin($Encode[$str{$i}]), 8, 0, STR_PAD_LEFT);    
}

echo $new_str;

Gibt bei mir:

0001110001100000010100100100011000011000010111000011110000101100000101000001111000000010011100000101100001111010000000000000110000011010001111100111011001101000001111100001100000100000000000100000000


EDIT:

Rück verwandeln must du eben aufpassen wenn deine Zahl mehr als eine Stelle hat, wahrscheinlich fährst du besser wenn du es mit str_split oder so in 8-ter Häppchen aufteilst und dann als ein array verarbeitest, so in etwa:

PHP:
$Decode = array_combine($Base64_Value, $Base64_Encode);
$back = str_split($new_str, 8);
for ($i = 0; $i < count($back); $i++){
    $back[$i] = $Decode[bindec($back[$i])];
}
$back = implode($back);
echo $back;

und wir haben wieder: OwpjMueWKPB4s9AGNf70fMQBA
 
Zuletzt bearbeitet:
So, ich hab das Problem hinbekommen *g*

PHP:
$str = 'AxNREp8XH/CgJwEBBAAAXmAA';

$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/>";
$Decode = array_combine($Base64_Encode, $Base64_Value);

for($i = 0; $i < strlen($str); $i++)
{
	$new_str .= $Decode[$str{$i}];
	$new_str .= " ";
	$Binary_String .= strrev(str_pad(decbin($Decode[$str{$i}]), 6, 0, STR_PAD_LEFT));
}
echo $new_str."<br>";
echo $Binary_String."<br>";
echo "000000100011101100100010001000100101001111111010111000111111010000000001100100000011001000100000100000000000000000000000111010011001000000000000";
Dein Rück-Convertieren muss ich dann nur entsprechend anpassen. Danke für die Hilfe!
 
EDIT: sry hatte antwortenfenter schon offen ^^

Soo nochmal genauer angeschaut, stimmt.

Also es sind immer 6 stellen nicht 8 und eben gedreht, aber kein Problem:

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");

$Encode = array_combine($Base64_Encode, $Base64_Value);

for($i = 0; $i < strlen($str); $i++)
{
    $new_str  .= strrev(str_pad(decbin($Encode[$str{$i}]), 6, 0, STR_PAD_LEFT));    
}

echo $new_str;

$Decode = array_combine($Base64_Value, $Base64_Encode);
$back = str_split($new_str, 6);
for ($i = 0; $i < count($back); $i++){
    $back[$i] = $Decode[bindec(strrev($back[$i]))];
}
$back = implode($back);
echo "\n".$back;
?>

stimmt 1 zu 1 mit deinem Soll String überein
 
Zurück