» »

[c++] Branje bita iz datoteke

[c++] Branje bita iz datoteke

purki ::

Pozdravljeni

Kako bi čim manj komplicirano v zanki naredil branje enega samega bita v datoteki (0 ali 1), nato drugi, tretji bit ... EOF. Pomembno je da stvar zavzame čim manj ciklov

napsy ::

Prebereš bajt nato pa uporabiš enega izmed bitnih operatorjev (and, or) da ugotoviš v kakšnem stanju je določen bit.
"If you die, you die. But when you live you live. There is no time to waste."

purki ::

Lahko kakšen primer?

Tutankhamun ::


char byte;  // bajt, ki si ga prebral iz datoteke

for (int bit = 0; bit < 8; ++bit)
     cout << "bit " << (int) bit << ((byte & (1 << bit)) ? " je postavljen" : " ni postavljen") << endl;



recimo da je ima spremenljivka byte vrednost 0x9F bo izpis
bit 0 je postavljen
bit 1 je postavljen
bit 2 je postavljen
bit 3 je postavljen
bit 4 je postavljen
bit 5 ni postavljen
bit 6 ni postavljen
bit 7 je postavljen
AMD Phenom QUAD 9950 Black Edition, 8GB

purki ::

Še neki:
1)
Kako bi zamenjal LSB in MSB in vse bite ki so umes:

Na primer 11011100 naj bi postalo 00111011 ?

2)
Ali v Cju obstaja operator shift on carry. Problem je ko šiftam neke bite se na drugi strani pojavljajo ničle, jaz pa bi namesto njih rad izpadle bite

purki ::

Aja pa hvala vsem za pomoč ;)

purki ::

Ni ideje? Ali se ne da

snow ::

Vse se da :)

Bite zamenjaš tako da v eni for zanki preverjaš če je bit postavljen in če je postaviš bit v eni drugi spremenljivki na nasprotnem koncu.

for(int i=0;i<8;i++)
{
    if(lala&1<<i)
    {
        bla|=1<<(7-i);
    }
}



Rotate (shift + carry) operatorja ni.
Lahko pa si napišeš eno funkcijo za to. Shift + en bitni or če je na nasprotnem koncu bit postavljen.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Tutankhamun ::

1. če mislš samo na izpis potem sam popravš tist kar sm ti napisu
for (int bit = 7; bit >= 0; ++bit)
     cout << "bit " << (int) bit << ((byte & (1 << bit)) ? " je postavljen" : " ni postavljen") << endl;


če pa hočeš prov spremenljivko mau prezrcalt pa tko
	unsigned char  byte, tmpbyte; // byte je spremenljivka, ki jo boš zrcalu

	byte = 0x9F;
	tmpbyte = 0;

	for (int i = 0; i < 8; ++i)
		(byte & (1 << i)) ? tmpbyte += (0x80 >> i) : tmpbyte += 0;
        byte = tmpbyte;

pol na konc pa lahko spet uporabš uno funkcijo za izpis...
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

Tutankhamun ::

namest tega 
(byte & (1 << i)) ? tmpbyte += (0x80 >> i) : tmpbyte += 0;

napiš raj
if (byte & (1 << i)) tmpbyte += (0x80 >> i);

mau krajš
AMD Phenom QUAD 9950 Black Edition, 8GB


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pohitritev spletne strani

Oddelek: Izdelava spletišč
292284 (1227) vezalke
»

Zaščita datotek

Oddelek: Pomoč in nasveti
172265 (1674) fosil
»

[Naloga] : Max kompresija testne datoteke

Oddelek: Programiranje
343113 (2037) StratOS
»

Kje dobit elektromotorcek, ki se pocasi vrti...

Oddelek: Elektrotehnika in elektronika
375235 (4673) madboy
»

Tlorisi his

Oddelek: Loža
157339 (7040) Sodom

Več podobnih tem