04. april 2005 - 18:17Der er
14 kommentarer og 1 løsning
Læse og skrive Bit til og fra en fil
Jeg ville lige høre hvordan man kunne skrive til en fil og læse fra en fil helt nede på binært niveau (altså bit)...
Grundet at jeg kunne tænke at lege med lidt fil komprimering bare for at lære noget om det, og fårdi at jeg syntes at nogle af de mest interassante emner inden for programmering er Komprimering, Kryptering og andre former for algoritmer fx inden for Collections sotering og gennemsøgning...
Nå men nok om interesseområde og back til det det handlede om...
Altså hvordan man kunne skrive og læse binært til en fil... Og desuden meget gerne med mulighed for at få det representeret på binær form... altså 10100100100000101010100101011101011101 osv... (fx ved Console.WriteLine, bare til under udviklingen så man kan følge med i hvad der sker)
Ja du går nok igennem Byte. men det er bare et sprøgsmål om selv at styre hvordan den byte ser ud... uransagligt for om det ellers giver nogen mening...
Men at man fx direkte kan fortælle den at den næste byte skal være "00101101"
og omvendt kunne gå ned og se at hvordan en enkelt byte ser ud... dermed rive "00101101" ud igen... for derved måske at kunne gå ind og måske se om nogle bits er overflødeige i den ene byte og så pakke... (det være med andre bytes i serie)
fx: hvordan jeg så vil "komprimere" det bliver en noget længere snak, pointen er bare om jeg kan kontrolere og styrer/bestemme hvad der står i en Byte...
Jeg har selv en Converter til at konvertere fra Decimal (long) til Bin, Oct, Hex eller et andet abskurt selvopfundet system... og returnere en string representation... og også den anden vej rundt (abskurt system -> long)
Tja nu sider jeg så lige og kigger på metoden "Write7BitEncodedInt" i BinaryWriter klassen... og spekulere på om det kan bruges til noget evt...
den må kunne representere fra -127 til 127 i en enkelt byte... 11111111 for -127 og 01111111 for 127 (mener jeg det er)...
Det jeg desvære kan være nervøs for er at man ikke er 100% sikker på at det er den data der bliver skrevet i filen, således at selve de data der skrives måske allivel fylder mere end 1 Byte...
De der Left-Shift, Right-Shift og Logic and/or operator har jeg ikke lige helt styr på brugen af endnu i forhold til Bit og det her...
Okay... ja det er jo nok noget af det jeg skal have fat i... pointen er netop at komme helt der ned når jeg skal komprimere... for måske at kunne undvære nogle bits i en given stream... for så senere at kunne kaste dem ind igen...
Så en 16 bit char måske kan Containes i ned til 6 bit...
00000000 00000001 = fx "a" 000011 = "a" hvor første 5 bit vil kunne fortælle om hvor meget der bliver brugt til at representere den egentlige data...
Det var så bare lige et nok meget ringe eksempel på hvordan... men ideen kan være god nok... man vil givet også kunne fjerne lange serier af nuller og 1 taller i en stream... osv osv... men for at kunne noget af dette skal jeg jo styrer denne bitstrøm... og hvor tåbeligt og dårligt komprimeringen så bliver til at starte med er ligemeget... Det er trods alt kun for at lære noget... og komme i gang... Skide være med at en text fil med måske 5 tegn der normalt fylder 5 byte's kommer til at fylde 10 bytes... (til at state med naturligvis) :P
Ikke hvis jeg er sikker på at hvis jeg ber en BinaryWriter om at skrive en byte defineret ved 0x8c som svare til 10001100 med Write metoden... at det så også er de bits der definere lige denne byte den skriver...
I såfald vil jeg tror jeg nok selv vil kunne styre hvordan 3 tegn eksempelvis kan pakkes ned i 2 bytes...
Jamen det ser det sørme også ud til... Det jo en dejlig ting...
Så er det jo ellers bare at komme i gang... Skal nok blive sjovt nok et eller andet sted... Indtil videre vil jeg sige tak for hjælpen... eller noget... :P
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.