Webstatt.org - Community seit 2006 - 2012 (2024?)

Zahlencodierung, Rest ausrechnen funzt nicht richtig!

user-265
05.10.2006 15:33

Programmiere gerade ne Funktion, welche die Zahlen umcodiert, je der Basis nach, wer in den höheren Stufen Informatik hatte, weiß was ich meine.

Hier das Script:
function changebasis ($data, $basisnow, $basislater) { 
// (Zahl die umgerechnet werden soll, jetzige Basis, gewünschte Basis)

// Ändert die Codierung einer Zahl

// Array mit Codezeichen
$figures = array_merge(range("0","9"zwinkern, range("a", "z"zwinkern);

// Code ändern
// in Dezimal umrechnen
$codelen = strlen($data); // Ermittelt die länge der Zahl
$issue = 0;
for($i=0; $i<$codelen; $i++) {
// Zeichen in Zahl umwandeln
foreach($figures as $key=>$value) {
if(strtoupper($figures[$key]) == strtoupper(substr($data, (-$i-1), 1))) {
$cipher = $key;
}
}
$issue += $cipher * pow($basisnow, $i); // Rechnet den Wert aus
/* # */echo $cipher." * ".$basisnow." ^ ".$i." = ".$issue."<br />";
}
// in gewünschten Wert umrechnen
$result = $issue;
$issue = "";
while($result > 0) {
/* # */echo "(".$result." / ".$basislater."zwinkern - ((".$result." % ".$basislater."zwinkern / ".$basislater."zwinkern R. ".($result % $basislater)." ".$figures[($result % $basislater)]."<br />";
$issue .= strtoupper($figures[($result % $basislater)]);
$result = ($result / $basislater) - (($result % $basislater) / $basislater);
/* # */echo $result."<br />";
}
return strrev($issue);
}

/* # */ sind Ausgaben um das Script zu testen

So funktioniert es auch ganz gut, wenn jedoch die ersten beiden Ziffer von links 19 sind, dann kriegt er das nicht mehr hin. Er kommt bei $result von 1 an und wenn er dann dividiert berechnet er nicht 0 Rest 1 sondern 0,1 R 0.... warum macht er das?

Ausserdem sobald die Zahlen über 11 Ziffern lang werden funzt garnichts mehr, hilfe!

Avatar user-253
05.10.2006 15:41

Geht es dir tatsächlich um den Fehler? user-158n schaue ich noch einmal. Ansonsten hilft dir [dok]base_convert[/dok]

user-265
05.10.2006 15:46

Das ist ja langweilig, fertige Funktionen, will es halt mal selbst Programmieren.

user-303
05.10.2006 16:35

es wäre wohl einfacher, wenn du die eingabezahl erstmal schön zu nem array aufsplittest.
tollerweise ist dann der array key gleich der stellenwertigkeit. dann kannste das, wofür du ne extra schleife brauchst, in nur einer zeile machen.

also in etwa so...

$set = array(
0=>0,
1=>1,
.....
A=>10,
B=>11,
...
);

$issue += $set[strtoupper($data{$i})]*pow($basisnow, $i);


so in etwa irgendwie...