Ragazzi,
ho la necessità di prendere un numero decimale e convertirlo in una stringa binaria da analizzare nel resto del programma.
Esiste una funzione nativa del C++ che mi permette di fare questo in modo semplice?
Bye![]()
Ragazzi,
ho la necessità di prendere un numero decimale e convertirlo in una stringa binaria da analizzare nel resto del programma.
Esiste una funzione nativa del C++ che mi permette di fare questo in modo semplice?
Bye![]()
Conquista la folla, e conquisterai la libertà (Proximus - Il gladiatore)
Il riferimento italiano per i Fans di Final Fantasy
Scandalos member of APE
Usa la funzione itoa()
codice:#include <iostream.h> void main() { int val=12345; char rapBin[65]; // alloca stringa per max 64 bit itoa( val, rapBin, 2); printf("Valore intero \t\t = %d\nRappresentazione binaria = %s\n", val, rapBin ); system("PAUSE"); }
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Poi appena ho tempo lo provo e ti faccio sapere!
Grazie mille
Bye![]()
Conquista la folla, e conquisterai la libertà (Proximus - Il gladiatore)
Il riferimento italiano per i Fans di Final Fantasy
Scandalos member of APE
La funzione itoa() non è standard ANSI "C". È disponibile su molti compilatori ma non su tutti (su Linux ad esempio non c'è).
Comunque è banale farsi una funzione apposita:
codice:#include <stdio.h> #define LEN_BINSTR_INT (sizeof (int)*8) char *binstr_int (char *bufout, int value) { unsigned int m; char *ret = bufout; for (m=1<<(LEN_BINSTR_INT-1); m!=0; m>>=1) *bufout++ = value & m ? '1' : '0'; *bufout = '\0'; return ret; } int main (void) { char str[LEN_BINSTR_INT+1]; printf ("%s\n", binstr_int (str, 619030885)); return 0; }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
alla faccia del banale![]()
perchè non ci spighi un po meglio come funziona la tua funzione .
ho provato a capirci qualcosa ma![]()
![]()
![]()
Ma '...nativa del C++...' e '...standard ANSI "C"...' sono sinonimi ? :master:
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Ok, non c'è problema:Originariamente inviato da GabbOne
perchè non ci spighi un po meglio come funziona la tua funzione .
1. definisco una nuova costante il cui valore rappresenta il numero di bit in un int. Avendo usato sizeof, il valore si "aggiusta" da solo. Se su una certa piattaforma un int è di 64 bit, allora la costante vale 64 (8*8) e così via.codice:1. #define LEN_BINSTR_INT (sizeof (int)*8) 2. 3. char *binstr_int (char *bufout, int value) 4. { 5. unsigned int m; 6. char *ret = bufout; 7. 8. for (m=1<<(LEN_BINSTR_INT-1); m!=0; m>>=1) 9. *bufout++ = value & m ? '1' : '0'; 10. *bufout = '\0'; 11. 12. return ret; 13. }
5. la variabile 'm' serve come "maschera" da usare per testare un singolo bit del valore in input. Il valore contenuto in 'm' avrà sempre un solo bit a 1.
6. ret è il puntatore da restituire che punta all'inizio del buffer (questo per convenienza).
8. il ciclo for usa la variabile 'm' (la maschera) per determinare la ripetizione del ciclo. All'inizio 'm' viene impostato in modo da avere il bit più significativo a 1 (quindi 10000.....0). Ad ogni ciclo, 'm' viene shiftato, spostato (m>>=1) a destra di 1 bit (quindi 0100...0 poi 00100....0, ecc...) fino a quando l'ultimo shift butta fuori il 1 e quindi 'm' vale poi 0.
9. per ogni locazione successiva nel buffer, viene scritto il carattere '1' o '0' a seconda se il bit mascherato da 'm' è 1 oppure 0.
10. viene "appeso" al fondo della stringa il carattere nullo.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
non ho parole ... fantastico per ovvi motivi
eleganza
intelligenza
spettacolo
e chi piu ne ha piu ne metta
grazie per la spiegazione ,per me è stata molto esauriente
complimenti davvero
![]()
![]()
![]()