Sì, è vero. Sia le stringhe che i decimali, così come tutti gli altri tipi, sono rappresentati in binario.
Tuttavia, il problema sta nel significato del binario. Non puoi semplicemente leggere una stringa come decimale, o almeno non dovresti farlo se stai cercando di ottenere la rappresentazione decimale di quel decimale.
Prendi ad esempio questa stringa in ASCII: "1.5"
In binario, questo è rappresentato da una matrice di byte di dimensione 4 o superiore.
1 . 5 4.07659398311e-315
31 2E 35 00
Se questo dovesse essere interpretato come un doppio, il valore sarebbe:
1 . 5 4.07659398311e-315
31 2E 35 00
Che cosa ha a che fare con il numero 1.5? Condividono lo stesso messaggio binario, ma poiché il binario è valido solo come la sua interpretazione, questo doppio non ha senso. Questa interpretazione è ulteriormente complicata se si considera che alcuni sistemi preferiscono salvare le informazioni decimali nei formati big-endian o little-endian, il che significa che si dipende anche dal sistema su cui si sta lavorando.
Per convertire questo in un double, dovresti analizzare questo file binario come previsto. Come risulta, la conversione equivalente di 1,5 in esadecimale è 0x3FF8000000000000.
Se si preferisce la precisione, in genere si tende a mantenere solo la forma della stringa nel programma. Allo stesso modo, se è necessario utilizzare questo valore nei calcoli, si mantiene il float o il double form. Quindi cosa succede se hai bisogno di entrambi? Tieni entrambi nel tuo programma, usando la forma più adatta per precisione o calcolo. Molto tempo fa sono i giorni in cui tenere entrambi in memoria potrebbe essere un problema (salvo alcune eccezioni in cui la velocità è critica, come nel caso dei driver).
Se si desidera determinare se una rappresentazione di stringa di un numero è una potenza di 2, il calcolo per farlo sarebbe più complicato del semplice atto di convertirlo prima in un numero. Una volta che è un numero, determinare se sia o meno una potenza di due è banale, con qualsiasi stringa binaria che contenga esattamente 1 (nel caso di decimale, dovresti controllare anche per le stringhe binarie che contengono esattamente uno 0 per i valori decimali negativi) .