Domanda

Al momento sto lavorando con un PLC che supporta ANSI C, ma utilizza il suo sapore del compilatore GNU, che non compila le funzioni variadic e cose del genere itoa. Quindi, utilizzando sprintf & co. non è un'opzione per la conversione di interi in stringhe. Qualcuno mi può guidare a un sito in cui è elencato un robusto, sprintf- implementazione libera di itoa o di inviare un algoritmo adatto qui? Grazie in anticipo.

È stato utile?

Soluzione

Questo è da K & R:

void itoa(int n, char s[])
{
    int i, sign;

    if ((sign = n) < 0)  /* record sign */
        n = -n;          /* make n positive */
    i = 0;
    do {       /* generate digits in reverse order */
        s[i++] = n % 10 + '0';   /* get next digit */
    } while ((n /= 10) > 0);     /* delete it */
    if (sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    reverse(s);
} 

reverse() solo inverte una stringa.

Altri suggerimenti

Solo per ragioni di completezza e come punto di riferimento per gli altri che possono inciampare sul soggetto, ho aggiunto questo link per un'implementazione ricorsiva di itoa itoa ricorsivamente che mi piace per la sua bellezza semplice, ma non si può usare per il mio sistema di destinazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top