Oppure

Loading
10/02/13 14:49
Saik
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
fstream file("file.txt",ios::out);
file.write(byte,1);


ma nn riesco a raggruppare i bit perchè nn li riesco a manipolare direttamente....
Come potrei risolvere?
aaa
10/02/13 18:50
Qwertj
puoi usare gli operatori di bitwise che operano direttamente sui bit
#define BIT_1 1
#define BIT_2 2
#define BIT_3 4
#define BIT_4 8
#define BIT_5 16
#define BIT_6 32
#define BIT_7 64
#define BIT_8 128
unsigned char byte = 0;
//setta il primo e il secondo bit a 1
byte |= BIT_1;
byte |= BIT_2

a te il compito di capire come metterli a 0 ;) leggi qua cprogramming.com/tutorial/…
aaa
14/02/13 11:58
Saik
Grazie mille ho buttato giu' questo:

#include <bitset>

using std::bitset;

#include <fstream>

using std::fstream;

#include <iostream>
void displayBits(unsigned value);

#include <string>

using std::string;
using std::cout;

int main()
{
	
	fstream out("out.txt",std::ios::out);
	string st = "01010101";
	const unsigned a = 1 << 8*sizeof(unsigned) - 1 ;
	unsigned result = 0 ;
	cout << "result :";
	displayBits(result);
	cout << "a :";
	displayBits(a);
	for(int i = st.size(); i > 0; i--)
	{
		if(st[i] == '1')
		{
			result ^= a;
		}
		result >>= 1;
		cout << i << " ";
			displayBits(result);
	}
	displayBits(result);
	std::cin >> result;
	return 0;
}

void displayBits(unsigned value)
{ 
	const int SHIFT = 8*sizeof(unsigned) - 1;
	unsigned  MASK = 1 << SHIFT;
	for(int i = 1; i <= SHIFT + 1;i++)
	{
		cout <<(value & MASK ? '1' : '0');
		value <<= 1;
	}
	cout << std::endl;
}



ovviamente è da migliorare
aaa
14/02/13 18:44
Qwertj
esistono!!!! i programmatori che si arrangiano esistono!!!
porti nuova fiducia nelle prossime generazioni Saik, grazie di cuore :hail:
aaa
15/02/13 16:09
Saik
:D purtroppo ci stiamo estinguendo ma esistiamo ancora :DD
aaa