Start · Sprachen · PHP · Referenz · gmp_strval

gmp_strval

Funktion

Wandelt eine GMP-Zahl in einen String um, optional in einer anderen Basis (2–62 oder -2 bis -36).

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_strval(GMP|int|string $num, int $base = 10): string

Beschreibung

gmp_strval() konvertiert eine GMP-Zahl (GMP-Objekt, Integer oder numerischer String) in eine Zeichenkette. Standardmäßig wird die Dezimaldarstellung (Basis 10) erzeugt, über den zweiten Parameter lässt sich aber jede Basis zwischen 2 und 62 wählen – damit sind Binär-, Oktal-, Hexadezimal- und viele weitere Zahlendarstellungen möglich.

Negative Basen (−2 bis −36) führen dazu, dass die Ziffern als Großbuchstaben ausgegeben werden, statt als Kleinbuchstaben. Das ist nützlich, wenn man eine für Menschen lesbare Darstellung in einem bestimmten Format benötigt.

Die Funktion ist besonders dann wichtig, wenn ein GMP-Ergebnis für die Ausgabe, die Speicherung in einer Datenbank oder die Übergabe an eine Funktion benötigt wird, die nur gewöhnliche PHP-Strings verarbeitet. Da PHP-Integer auf 64 Bit begrenzt sind, muss man bei sehr großen Zahlen den Umweg über Strings nehmen.

Als Eingabe akzeptiert die Funktion neben GMP-Objekten auch ganze Zahlen und numerische Strings, sodass keine explizite Konvertierung mit gmp_init() notwendig ist.

Parameter

Name Typ Default Beschreibung
$num Pflicht GMP|int|string Die zu konvertierende GMP-Zahl als GMP-Objekt, PHP-Integer oder numerischer String.
$base int 10 Die Basis für die Ausgabe. Erlaubt sind Werte von 2 bis 62 (Kleinbuchstaben für a–z) sowie −2 bis −36 (Großbuchstaben für A–Z). Standard ist 10 (Dezimal).

Rückgabewert

Typ
string
Beschreibung
Die Zeichenketten-Darstellung der GMP-Zahl in der angegebenen Basis. Negative Zahlen werden mit einem vorangestellten Minuszeichen - zurückgegeben.

Beispiele

Dezimal-, Hexadezimal- und Binärdarstellung einer GMP-Zahl

<?php
$zahl = gmp_init('123456789012345678901234567890');

echo gmp_strval($zahl) . "\n";      // Dezimal (Basis 10)
echo gmp_strval($zahl, 16) . "\n";  // Hexadezimal (Basis 16, Kleinbuchstaben)
echo gmp_strval($zahl, 2) . "\n";   // Binär (Basis 2)
echo gmp_strval($zahl, -16) . "\n"; // Hexadezimal (Basis -16, Großbuchstaben)
123456789012345678901234567890 58936e53d139afefabb2683f 10110001001001101101110010100111101000110011001101011111110111110101011101100100110100000111111 58936E53D139AFEFABB2683F

Ergebnis einer GMP-Berechnung als String ausgeben

<?php
// Sehr große Fakultät berechnen und als Dezimalstring ausgeben
$ergebnis = gmp_init(1);
for ($i = 2; $i <= 30; $i++) {
    $ergebnis = gmp_mul($ergebnis, $i);
}

$ausgabe = gmp_strval($ergebnis);
echo "30! = " . $ausgabe . "\n";
echo "Länge: " . strlen($ausgabe) . " Ziffern\n";
30! = 265252859812191058636308480000000 Länge: 33 Ziffern

Negative GMP-Zahl in verschiedenen Basen

<?php
$neg = gmp_init(-255);

echo gmp_strval($neg, 10) . "\n"; // Dezimal
echo gmp_strval($neg, 16) . "\n"; // Hexadezimal
echo gmp_strval($neg, 2)  . "\n"; // Binär
-255 -ff -11111111

// Wichtig · Fallstricke

Basis-Bereich beachten: Wird eine Basis außerhalb des erlaubten Bereichs (2–62 bzw. −2 bis −36) übergeben, erzeugt PHP eine Warnung und gibt false zurück.

GMP-Erweiterung erforderlich: Die gmp-Erweiterung muss in der PHP-Installation aktiviert sein (--with-gmp beim Kompilieren bzw. extension=gmp in der php.ini). Seit PHP 7.2 ist die Erweiterung standardmäßig gebündelt.

Basis 62: Bei Basis 62 werden die Ziffern 0–9, dann a–z (10–35) und schließlich A–Z (36–61) verwendet – negative Basen mit Großbuchstaben sind hier nicht anwendbar.