Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.380 pregleda

Najnovija ↓

C# - upis bitova u datoteku 10.12.2010. u 20:02 · pre 193 meseca #1
Da li neko zna jel postoji neka klasa koja omogućava rad sa bitovima u C#-u? Radim Shannon Fano kompresiju i treba da binarni kod koji dobijem snimim u datoteku. Ukoliko bi snimao kao tip integer ili kao string dobijena datoteka bi bila veća od ulazne što nije dobro. Čak i kad bi vršio konverziju binarnog koda u HEX-a opet bi datoteka bila veća. Neka ideja, bilo šta?
Potpis
DDimitrov
Re: C# - upis bitova u datoteku 10.12.2010. u 21:33 · pre 193 meseca #3
Svi bitovi su snimljeni u jedan string, mada nije nikakav problem da ih konvertujem nekako, samo nemam ideju kako i u šta... Datoteka može da bude bilo kog tipa
Potpis
DDimitrov
Re: C# - upis bitova u datoteku 10.12.2010. u 21:40 · pre 193 meseca #4
Pa, iseckaj onda na po 8 karaktera i konvertuj svaki takav deo u po jedan bajt a onda to upisuj. Onda ces imati preslikane bitove iz stringa u one da disku tj. jedan bit ce upravo i zauzimati jedan bit memorije na hdd-u.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: C# - upis bitova u datoteku 11.12.2010. u 17:40 · pre 193 meseca #5
Iseckam ga i pamtim svaki bajt pocebno, međutim, on svaki kod, tj svaku 0 ili 1 prepoznaje kao 1 bajt. Evo deo koda koji vrši upis, ekstenzija datoteke je txt ali i kad je stavim *.dat ponaše se potpuno isto i moguće je otvoriti u notepad-u.

Code:

using (FileStream stream = new FileStream("C:\\datoteka.txt", FileMode.Create))
{
    using (BinaryWriter writer = new BinaryWriter(stream))
    {
        byte[] bajt;
        bajt = encoding.GetBytes(osambita); // osambita - string koji sadrži 8 nula i jedinica
        writer.Write(bajt);
        writer.Close();
    }
    stream.Close();
}
Potpis
DDimitrov
Re: C# - upis bitova u datoteku 11.12.2010. u 18:07 · pre 193 meseca #6
Ako hoćeš bajt da upišeš kao niz bitova onda ga upisuj kao string (nemoj da koristiš BinaryWriter).

Code:

string bajt;
bajt = osambita;
//...

A ako hoćeš da upisuješ bit po bit onda promenljivu postavi kao bit i ne deli ulazni string na po osam karaktera već na po jedan.

Re: C# - upis bitova u datoteku 11.12.2010. u 18:59 · pre 193 meseca #7
Moras prvo obraditi svaki string.
Npr, ako imas "10010101" moras pregledati svaku poziciju i izracunati broj. Onda taj broj smestis u promenljivu tipa Byte.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: C# - upis bitova u datoteku 13.12.2010. u 17:52 · pre 193 meseca #8
Uspeo sam da odradim, evo koda, možda nekom potreba. Hvala na saradnji
Code:

if (kod[i] == '0')
{
    bc++;
    buffer = (byte)(buffer << 1);
    if (bc == 8)
    {
        stream.WriteByte(buffer);
        buffer = 0;
        bc = 0;
    }
}
if (kod[i] == '1')
{
    bc++;
    buffer = (byte)(buffer << 1);
    buffer = (byte)(buffer | 0x01);
    if (bc == 8)
    {
        stream.WriteByte(buffer);
        buffer = 0;
        bc = 0;
    }
}
Potpis
DDimitrov
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme