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++ - Scrittura e lettura bit in un file
Forum - C/C++ - Scrittura e lettura bit in un file

Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 15:49
Domenica, 10/02/2013
Ciao ragazzi come posso manipolare i bit di un file? avevo pensato di raggrupparli in 8 bit(formando quindi un byte) e poi flushare il contenuto nel file con
Codice sorgente - presumibilmente Plain Text

  1. fstream file("file.txt",ios::out);
  2. file.write(byte,1);



ma nn riesco a raggruppare i bit perchè nn li riesco a manipolare direttamente....
Come potrei risolvere?

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 19:50
Domenica, 10/02/2013
puoi usare gli operatori di bitwise che operano direttamente sui bit
Codice sorgente - presumibilmente C++

  1. #define BIT_1 1
  2. #define BIT_2 2
  3. #define BIT_3 4
  4. #define BIT_4 8
  5. #define BIT_5 16
  6. #define BIT_6 32
  7. #define BIT_7 64
  8. #define BIT_8 128
  9. unsigned char byte = 0;
  10. //setta il primo e il secondo bit a 1
  11. byte |= BIT_1;
  12. byte |= BIT_2


a te il compito di capire come metterli a 0 ;) leggi qua http://www.cprogramming.com/tutorial/bitwise_operators.html

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 12:58
Giovedì, 14/02/2013
Grazie mille ho buttato giu' questo:
Codice sorgente - presumibilmente C++

  1. #include <bitset>
  2.  
  3. using std::bitset;
  4.  
  5. #include <fstream>
  6.  
  7. using std::fstream;
  8.  
  9. #include <iostream>
  10. void displayBits(unsigned value);
  11.  
  12. #include <string>
  13.  
  14. using std::string;
  15. using std::cout;
  16.  
  17. int main()
  18. {
  19.        
  20.         fstream out("out.txt",std::ios::out);
  21.         string st = "01010101";
  22.         const unsigned a = 1 << 8*sizeof(unsigned) - 1 ;
  23.         unsigned result = 0 ;
  24.         cout << "result :";
  25.         displayBits(result);
  26.         cout << "a :";
  27.         displayBits(a);
  28.         for(int i = st.size(); i > 0; i--)
  29.         {
  30.                 if(st[i] == '1')
  31.                 {
  32.                         result ^= a;
  33.                 }
  34.                 result >>= 1;
  35.                 cout << i << " ";
  36.                         displayBits(result);
  37.         }
  38.         displayBits(result);
  39.         std::cin >> result;
  40.         return 0;
  41. }
  42.  
  43. void displayBits(unsigned value)
  44. {
  45.         const int SHIFT = 8*sizeof(unsigned) - 1;
  46.         unsigned  MASK = 1 << SHIFT;
  47.         for(int i = 1; i <= SHIFT + 1;i++)
  48.         {
  49.                 cout <<(value & MASK ? '1' : '0');
  50.                 value <<= 1;
  51.         }
  52.         cout << std::endl;
  53. }



ovviamente è da migliorare

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 19:44
Giovedì, 14/02/2013
esistono!!!! i programmatori che si arrangiano esistono!!!
porti nuova fiducia nelle prossime generazioni Saik, grazie di cuore :hail:

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 17:09
Venerdì, 15/02/2013
:D purtroppo ci stiamo estinguendo ma esistiamo ancora :DD

PM Quote