Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Mascheramento lettura bit da byte
Forum - C/C++ - Mascheramento lettura bit da byte

Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 22:33
Venerdì, 12/10/2012
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2.  
  3. //#define TRUE 1
  4. //#define FALSE 0
  5.  
  6. typedef enum boolean{FALSE = 0, TRUE = 1}bool;
  7.  
  8. /*La funzione, legge il bit numero n a partire
  9. * dal meno significativo, degli 8 bit del dato
  10. * char*/
  11. bool leggibit(char dato, char n)
  12. {
  13.         char buffer = 0;        /*il buffer farà da maschera*/
  14.         bool bit;
  15.  
  16.                         /*mascheramento*/
  17.         if(dato & (buffer << n)) bit = TRUE;            /*sciftiamo il bit del baffer di n bit a sinistra*/
  18.                 else bit = FALSE;                                       /*dopodiche eseguiamo l'end bit a bit tra buffer*/
  19.                                                                                         /*e dato, se e solo se, l'& restituisce 1 nel bit*/
  20.         return bit;                                                             /*v'è il livello ligico alto*/
  21. }
  22.  
  23.  
  24.         /*Programma verifica*/
  25. int main()
  26. {
  27.         char byt, nbit;
  28.         bool uscita;
  29.  
  30.                         printf("\n***********************************************************************\n");
  31.  
  32.                         printf("Byte = ");
  33.                                 scanf("%c", &byt);
  34.  
  35.                         printf("Bit da legere = ");
  36.                                 scanf("%c", &nbit);
  37.  
  38.                         uscita = leggibit(byt, nbit);
  39.  
  40.                         printf("\nbit = %c\n", uscita);
  41.  
  42.                 //}
  43.  
  44.         return 0;
  45. }



Compilazione e output:

Codice sorgente - presumibilmente C/C++

  1. $ cc leggibit.c -o leggibit
  2. $./leggibit
  3.  
  4. ***********************************************************************
  5. Byte = 5
  6. Bit da leggere =
  7. bit =



Una volta inserito il byte, il programma spara in out le altre due stringhe senza fermarsi ad'ascoltare il Bit da leggere; per poi arrestarsi!

Ultima modifica effettuata da pistilloi il 12/10/2012 alle 22:37
PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 14:21
Sabato, 13/10/2012
Codice sorgente - presumibilmente C/C++

  1. int main()
  2. {
  3.         char byt, nbit;
  4.         bool uscita;
  5.  
  6.                         printf("\n***********************************************************************\n");
  7.                        
  8.                         printf("Byte=");
  9.                                 scanf("%c", &byt);
  10.                         fflush(stdin);
  11.  
  12.                         printf("Bit da leggere = ");
  13.                                 scanf("%c", &nbit);
  14.  
  15.                         uscita = leggibit(byt, nbit);
  16.  
  17.                         printf("\nbit = %c\n", uscita);
  18.  
  19.                 //}
  20.                 system("pause");
  21.  
  22.         return 0;
  23. }


Ultima modifica effettuata da anthony015 il 13/10/2012 alle 14:22
PM Quote
Avatar
pistilloi (Normal User)
Newbie


Messaggi: 9
Iscritto: 03/12/2010

Segnala al moderatore
Postato alle 17:16
Sabato, 13/10/2012

Il problema persiste!

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:56
Domenica, 14/10/2012
Testo quotato

Postato originariamente da pistilloi:
Il problema persiste!


Prima di chiamare la funzione leggibit, viene richiesto il carattere da leggere all' utente, con il comando scanf().
In questo modo, nel buffer rimane occupato dall' ultimo invio.

Per ovviare a cio,usa:

Codice sorgente - presumibilmente C/C++

  1. while (getchar() !='\n') ;




PM Quote