Mailinglisten-Archive |
Hallo Liste, ich hatte mich letzte Woche schon einmal an euch gewendet, da ich einen fremden C++-Code in PHP umsetzen muss aber leider mit der Bedeutung des C-Codes schon nicht zurecht kam. Mittlerweile habe ich mit dem Herstller telefoniert und auch die Funktion in PHP umgesetzt. Leider gibt es noch eine kleine Unstimmigkeit in der Konvertierung in einen Hexwert Hier ist noch einmal die Funktion in C++: void sum_add(ulong* sum, const char* str) { size_t len=strlen(str); for(size_t i=0; i<len; i++) { *sum = (*sum + ((ulong)str[i] * ((i+1)<<4))) % 0x10000; } } Meine Funktion in PHP: function sum_add($sum, $str){ $len = strlen($str); for ($i=0; $i < $len; $i++){ $sum = $sum + ((ord($str[$i]) * (($i+1) << 4)) & 0xffffffff ); } return($sum); } Die Modulo-Operation in C dient lediglich der Umwandlung in Hex und fällt hier weg. Zum Vergleich ob die Funktion richtig arbeitet gibt es ein Beispiel des Herstellers. Ich habe mir nach jedem Aufruf der Funktion den Wert per dechex() Ausgeben lassen. Der Kommentar hinter dem Aufruf von sum_add() zeigt was raus kommen soll und der Kommentar nach dem dechex() zeigte was bei mir raus kommt. Bis zum 4 Aufruf ist auch alles richtig, danach steht aber immer an erster Stelle ein Wert der da irgendwie nicht hin gehört. (1fe20 statt fe20) Mein Beispiele: $sum = sum_add($sum, ""); // "Stop" param, sum is 0 after this operation echo dechex($sum)."<br>"; $sum = sum_add($sum, ""); // "Scope" param, sum is 0 after this operation echo dechex($sum)."<br>"; $sum = sum_add($sum, "Dr.X"); // User id, sum is 0x00003120 echo dechex($sum)."<br>"; // 3120 $sum = sum_add($sum, "1065507963"); // Time stamp, sum is 0x0000e6f0 echo dechex($sum)."<br>"; // e6f0 $sum = sum_add($sum, "12121212-1212"); // Patient id, sum is 0x0000fe20 echo dechex($sum)."<br>"; // 1fe20 $sum = sum_add($sum, "1234^2345"); // Accession numbers, sum is 0x00009c40 echo dechex($sum)."<br>"; // 29c40 $sum = sum_add($sum, "001^001"); // Exam numbers, sum is 0x0000fc60 echo dechex($sum)."<br>"; // 2fc60 $sum = sum_add($sum, "test"); // System password, sum is 0x000042d0 echo dechex($sum)."<br>"; // 342d0 Kann mir da jemand weiter helfen was an der Stelle falsch läuft? Ich habe schon auf php.net nachgeschaut und auch schon den Trick mit dem typecast probiert und dem +0 ( dechex((float)$sum + 0) ) Aber auch das bleibt ohne Erfolg. Grüße und danke im Voraus. Alex
php::bar PHP Wiki - Listenarchive