Da int a stringa ma con dimensione variabile... come si fa?

di Anonimizzato14265 il
9 risposte
Ciao ragazzi sono nuovo del forum, mi trovo difronte a un piccolo problemuccio e spero che voi sicuramente più esperti di me possiate darmi un aiutino...
Parto con il dire che non sono un gran esperto di c++ per questo Vi chiedo, nel caso vogliate aiutarmi di darmi una spiegazione facile e magari con un esempio...

Sto realizzando un applicazione per un micro, e sto utilizzando il linguaggio C++.
Dovrei convertire un numero intero in una stringa, il problema non è tanto la conversione, ma è la dimensione della stringa, mi spiego meglio con un esempio:

unsigned int numero;
unsigned int txt[10]; 

numero=15;
intostr(numero,txt);
in questa maniera ottengo una stringa, che avrà come "valore"
8 spazi e 15 quindi: txt è uguale a: 15
il mio problema è eliminare i 8 spazi prima del 15;
voi mi direste di dichirare txt[2], ma non posso farlo, perché numero può avere un valore che può variare da 1 a 9999999999 (10 nove)

esiste un modo in c++ per far si che la stringa abbia come lunghezza, (in questo caso) 2?
cioè esiste un modo per dichiararla dopo la lunghezza?
spero tanto di essere riuscito a farmi spiegare...
p.s se uso ltrim la mia variabile ha come valore: 15 e poi 8 spazi vuoti, e anche questo non va bene

9 Risposte

  • esiste un modo in c++ per far si che la stringa abbia come lunghezza, (in questo caso) 2?
    cioè esiste un modo per dichiararla dopo la lunghezza?
    spero tanto di essere riuscito a farmi spiegare...
    p.s se uso ltrim la mia variabile ha come valore: 15 e poi 8 spazi vuoti, e anche questo non va bene
    Se stai lavorando su un micro dovrai imparare a fare da te queste cose, senza appoggiarti a librerie.
    Tuttavia, per iniziare, verifica se hai a disposizione la funzione sprintf() con la quale puoi trasformare un intero in stringa, es.:
    char str[20];
    sprintf( str, "%d", valoreint );
  • Si, certo che c'è, ma questa mi restituisce semplicemente il numero di caratteri scritti di una stringa, ma la mia stringa occupa sempre ( nel caso che mi hai descritto tu) 20
  • Ma non devi trasformare un intero in stringa? sprintf() fa proprio questo, senza aggiungere spazi a destra o sinistra.
    Una dimensione massima devi comunque darla, in questa caso 20 è anche (volutamente) esagerata.
    Dato che parli di valori con 10 cifre (per un int) mi fa pensare che hai per le mani un micro a 32bit almeno, quindi un micro di una certa potenza al quale sicuramente non fanno paura 20 bytes sullo stack!
  • Mmm non ci salto proprio fuori...
    Si, comunque sto facendo un programma per un pic32;
    in pratica dovrei salvare delle variabili di tipo intero su una memoria sd;
    dopo tutta l'inizializzazione del tipo di partizione, velocità di trasferimento, tipo ecc ecc, alla fine creo il file, e fino a qua tutto ok, poi dovrei scriverci all'interno;
    e qua nasce il bello\brutto!!!
    il comando che dovrei usare ha questa sintassi:
    void Mmc_Fat_Write(char *fdata, unsigned data_len);

    quindi gli dovrei dare la stringa e la lunghezza di essa;
    se io gli faccio misurare la stringa con strlen mi dice che è lunga tanto quanto è stata dichiarata,
    quindi non so proprio come fare per dirgli che la stringa è più corta, visto che ha spazi vuoti...
    non capisco proprio come potrei usare il comando che tu mi hai suggerito...
  • Con la sprintf che ti è stata proposta non avrai spazi dopo il numero nella stringa. Lo spazio previsto (ad esempio 20 caratteri) sarà riempito in questo modo

    12345 -> caratteri del valore convertito
    \0 -> zero binario indicatore di fine stringa
    ... -> altri 14 byte casuali che non devi prendere in considerazione.

    Quindi la strlen di questa stringa darà 5 come risultato non 20.
  • Grazie mille ragazzi, ho risolto
  • Presumo con
    
    char str[20];
    sprintf( str, "%d", valoreint );
    Mmc_Fat_Write(str, strlen(str));
    
  • Adesso provo come mi hai suggerito tu!!! per il momento ci sono saltato fuori cosi:

    inttostr(intero, stringa);
    res = Ltrim(stringa);
    Mmc_Fat_Write(res,strlen(res));
  • Perfetto!!!! anche con il tuo comando!!!
    anzi meglio!!! risparmio una riga!!!!!
    MILLLEEEEEE grazie!!!!!
Devi accedere o registrarti per scrivere nel forum
9 risposte