Page 1 of 1

[C++]Problema conversione numero...

Posted: Wed Dec 07, 2016 7:25 am
by stefanoxjx
Ciao a tutti, ho un problema nella conversione da stringa (numero esadecimale) a intero.
Nello specifico, questa riga di codice:

Code: Select all

int64_t code=stol(rfidCode, nullptr, 16);
convertendo questo numero: 0x0500378373, mi genera il seguente errore:

Code: Select all

terminate called after throwing an instance of 'std::out_of_range'
  what():  stol
Ho provato anche questa soluzione:

Code: Select all

#include <sstream>
#include <iostream>

int main()
{

    std::string s("0500378373");
    unsigned long value;
    std::istringstream iss(s);
    iss >> std::hex >> value;
    std::cout << value << std::endl;

    return 0;
}
che non genera errori ma un risultato sbagliato (4294967295).
Le due soluzioni sopra elencate nel mio PC con debian a 64bit funzionano entrambe.
Avete qualche consiglio su come potrei risolvere il problema?
Grazie.

Stefano

Re: [C++]Problema conversione numero...

Posted: Mon Dec 12, 2016 10:28 am
by davidequack
Stai tentando di mettere un valore esprimibile solo con un intero a 64 bit dentro un intero a 32 bit. Il compilatore fa il suo dovere. Il tuo rasberry è un processore a 32 bit.

In C devi usare usare la funzione strtoull oppure strtoll, a seconda se lo vuoi con senza segno o con segno, e devi mettere il valore in una variabile unsigned long log, oppure long long nel secondo caso.

Re: [C++]Problema conversione numero...

Posted: Tue Dec 13, 2016 1:45 pm
by stefanoxjx
Ciao e grazie per la risposta.
Premetto che non ho ancora provato la tua soluzione che comunque sono sicuro che funzionerà.
Nel frattempo per risolvere il problema mi sono scritto una funzione che converte da decimale a esa.
Avevo intuito anch'io che il problema fosse quello che hai detto tu, ma davo per scontato che stol() andasse bene anche per i long long.
Effettivamente, solo ora andando a spulciare ho visto che esiste anche una funzione stoll().
Ti ringrazio per la dritta.

Stefano