PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shift in PHP



Giuly
13-03-2007, 22:49
Hi,
ich versuche grade das hier in PHP nachzuschreiben (JavaScript):

for(var i=0;i<c.length;)s+=String.fromCharCode(((c.charCodeAt(i+ +)&15)<<4)|(c.charCodeAt(i++)&15));document.write(s);

Leider blieben meine Versuche ohne Erfolg:

for($i=0;i<len($c);)
{
$s .= $c[i++]&15<<4|$c[i++]&15;
}
Kann mir vielleicht jemand sagen, wie man das richtig macht?

MfG

Romanday
14-03-2007, 04:50
Kann mir vielleicht jemand sagen, wie man das richtig macht?

MfG

Geht viel einfacher. Dafür gibt es schon vorgefertigte Funktionen.
Schau dir mal strlen(), ord() und chr() an.

Den ersten Buchstaben erreichst Du mit $mein_text[0].

Giuly
14-03-2007, 08:52
Funktioniert auch irgendwie nicht:

$c="SlVhGdvMF<s^P]";
$s="";
for($i=0;i<strlen($c);)
{
//$s .= chr(ord($c[i++])&15<<4)|ord($c[i++])&15);
$s.=chr(((ord(c[i++])&15)<<4)|(ord(c[i++])&15));
}
echo $s;

Romanday
14-03-2007, 16:14
Funktioniert auch irgendwie nicht:

$c="SlVhGdvMF<s^P]";
$s="";
for($i=0;i<strlen($c);)
{
//$s .= chr(ord($c[i++])&15<<4)|ord($c[i++])&15);
$s.=chr(((ord(c[i++])&15)<<4)|(ord(c[i++])&15));
}
echo $s;

Kopieren einsetzen geht nicht.:D
Eine Pipe kennt PHP nicht.
Mit << und & kannst Bitverschiebung machen.
Solche Umwege brauchst Du aber in PHP nicht zu gehen (oder selten).

http://www.php.net/manual/en/function.chr.php
http://www.php.net/manual/en/function.ord.php

Giuly
14-03-2007, 17:34
Tut mir leid, aber Bitverschiebung war noch nie mein Fall (Ich versuche immer noch in C nachzuvollziehen, wie man mit 7 die Optionen 3 und 4 setzt, Stichwort Chmod u.a.)
Vielleicht könntest du mir erklären, was &15 und <<4 machen. Das einzige, was ich weiß, ist, dass das irgendwas binäres macht. Das war's. Ausserdem wäre nicht schlecht, wenn du mir sagst, wie ich das OR (Oder ist | in JavaScript kein OR?) umgeht.

MfG

Also <<4 ist Multiplikation mit 16 in Dezimal. &15 kann man mit intval(substr(strval(decbin(ord(c[i++]), -4, 4)))); machen, aber die Pipe?

Romanday
15-03-2007, 17:34
Tut mir leid, aber Bitverschiebung war noch nie mein Fall (Ich versuche immer noch in C nachzuvollziehen, wie man mit 7 die Optionen 3 und 4 setzt, Stichwort Chmod u.a.)
Vielleicht könntest du mir erklären, was &15 und <<4 machen. Das einzige, was ich weiß, ist, dass das irgendwas binäres macht. Das war's. Ausserdem wäre nicht schlecht, wenn du mir sagst, wie ich das OR (Oder ist | in JavaScript kein OR?) umgeht.

MfG

Also <<4 ist Multiplikation mit 16 in Dezimal. &15 kann man mit intval(substr(strval(decbin(ord(c[i++]), -4, 4)))); machen, aber die Pipe?

bin auch kein JS Spezialist. Das mußt du mal hier im JS fFrum nachfragen.
Weiterhin empfehle ich dir
http://www.php.net/manual/en/index.php
durchzuackern.

Das was Du suchst ist && und ||.
Da Du von C kommst noch ein Tip.
Es ist günstiger nach einer Funktion für einen speziellen Zweck zu suchen,
als wie in C irgendetwas zu konstruieren zu müssen.

Das geht zwar, ist aber meist langsamer und wartungsaufwendiger.
In PHP gibt es für fast jeden Quatsch irgendeine Funktion.
Einfach mal eine rausssuchen und mit echo oder print austesten.
Dein Programm ist in PHP ein Dreizeiler (nur so als Anmerkung :D).