Der Horner-Algorithmus ist dazu da, um einen String von Zahlen im Ascii-Format in eine Integer-Zahl zu verwandeln.
Im folgenden C-Programm ist str der String, abgeschlossen durch ein 0x, der die Zahl enthält. Der Integer-Wert wird zurückgegeben.
inline int Horner(char* str)
{
int val=0;
while (*str)
{
val*=10;
val+= *str++ - '0';
}
return val;
}
Der Wert wird folgendermassen berechnet: Zuerst wird die Variable auf Null gesetzt. Dann wird bei jedem Character die Variable mal Zehn gerechnet, anschliessend der Ascii-Wert der momentanen Stringposition dazugerechnet und schlussendlich der Ascii-Wert der Ziffer '0' wieder abgezogen. Der Ascii-Wert der Ziffer '0' ist 48 = 0x30.
Dieses obige Programm ist noch sehr simpel aufgebaut. Das von der C-Bibliothek vorgegebene Programm "atoi" (ascii to integer) beispielsweise kann aber noch mehr: Es überprüft, ob wirklich nur Ziffern in diesem Stringblock auftreten, es berücksichtigt das Vorzeichen und es hat Sicherheitsschleusen für Under- und Overflows.
Da jedoch für die alltägliche Programmierung häufig nur positive Werte umgewandelt werden müssen, die niemals einen Overflow erzeugen werden, ist dieses kleine Programm schneller und platzsparender. Es ist so klein, dass es sogar wie hier problemlos als inline deklariert werden kann. Sollten jedoch bei der Benutzung dieser Funktion auf einmal Fehler auftreten, so ist es ratsam, trotzdem einmal das atoi einzusetzen, um zu überprüfen, ob nicht doch fehlerhafte Werte übergeben werden.