Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Conversione decimale/binario

    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

  2. #2
    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.

  3. #3
    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    alla faccia del banale



    perchè non ci spighi un po meglio come funziona la tua funzione .

    ho provato a capirci qualcosa ma


  6. #6
    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.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da GabbOne
    perchè non ci spighi un po meglio come funziona la tua funzione .
    Ok, non c'è problema:

    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. }
    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.

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    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




Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.