Odczyt z pliku binarnego do formatu String

0

witam forumowiczów, czy w ten sposób można odczytać dane z pliku binarnego i zapisać je w stringu? Bo chyba nie działa. Z góry dzięki za pomoc.

string pobierz(void)
{
    ifstream plik;
    plik.open(sciezka, ios::binary);

    if( plik.good() == true )
    {
        string linia;
        while(getline(plik, linia))
            message+=linia;

        plik.close();
    }
    return message;
}
0

Jeżeli cie nie interesują znaki przejścia do nowego wiersza to ok, jeżeli interesują to należy ich dodać.

0

plik binarny będzie się składał z 512b (kombinacji 0 i 1) chce żeby ten string miał potem długość 512 i składał się z 0 i 1

0

To wystarczy:

string content;
ifstream(sciezka)>>content;
0

wewnątrz ifa?

0

mam plik binarny o nazwie test i lokalizacji C:\test.bin

string sciezka = "C:\test.bin";

Dalej próbowałem ze swoim kodem i z kodem Dragona i przy cout<<message mam "nic"

Plik test.bin stworzyłem edytorem heksadecymalnym(pierwsze i ost 32b z 512 są "1" reszta to "0"). Gdzie tkwi błąd?

0

string sciezka = "C:\\test.bin";

0

Taka zmiana daje tzw. krzaki. Da się w ogóle przekonwertować blik binarny do stringa żeby było "000...01111..11100.000" ??

1

Do każdego znaku napisu dodaj '0'

0
 string content;
ifstream(sciezka)>>content;

Sam podawałeś taką podpowiedź jak tu dodać '0' do każdego bitu?

0

Chociazby tak:

for(size_t i = 0; i < content.size(); ++i) content[i] += 1;

albo tak:

size_t sz = content.size();
while(sz--)
    content[sz] += 1;

mozna i tak:

for_each(content.begin(), content.end(), [](char& x) {x += 1;});

http://ideone.com/jFWcZz

0

Po dodaniu jak wyżej tylko z +='0' mam
208556892851925efba5521.png

a gdzie jedynki? zamiast nich są jakieś A

0
string pobierz(string m)
{
    ifstream plik;
    plik.open(sciezka, ios::binary);

    if( plik.good() == true )
    {
        ifstream(sciezka)>>m;

        for(size_t i = 0; i < m.size(); ++i)
            m[i] += '0';
    }
    return m;
}
0
void pobierz(string& c)
{
    ifstream("C:\\test.bin") >> c;
    for_each(c.begin(), c.end(), [](char& x) {x += '0'; });
}

Twoja funkcja, jak cos bedzie nie tak to blad jest w innym miejscu. + Nie skomentuje tego, tworzenia ifstreamow na potege.

0

a ten for_each to w jakiej bibliotece bo u mnie jest undefined

0

Nadal to samo...
1361654773519264e5956cd.png

0

żeby nie było wątpliwości zawartość pliku test.bin
107344898951926578f1600.png

0

Wiedzialem, po prostu wiedzialem, ze nie jestes w stanie odroznic liczby 0x11 (17) od 0x01 (1)...

0

ja chce żeby wyświetlało 111...11000..00011...1 a nie 0x11. To ma być 512 bitów zera i jedynki to niby jak mam to podać?

0

już nie ważne nie pogrążam się dalej. Dziękuję za pomoc.

0

Rozwiazanie dla potomnych (wczytanie, dodanie, wyswietlenie):

#include <algorithm>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

void load(const char* path, string& content)
{
    ifstream(path) >> content;
    for_each(content.begin(), content.end(), [](char& x) {x += '0';});
}

int main()
{
    string content;
    load("test.bin", content);
    cout << content;
    return 0;
}
  • poprawny plik wejsciowy:
    user image
0

Tak jak zrobiłeś ten plik to odczytać możesz tak:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
 
int main()
  {
   ifstream bin("test.bin",ios::binary);
   for(char ch;bin.get(ch);) cout<<setw(2)<<setfill('0')<<(int)ch;
   return 0;
  }

Proszę zauważyć że w tym pliku kodujesz dwie cyfry binarne na znak.

0

AA teraz odwrotnie - mam string(wynik operacji) wyglądjący "0001010111100001110001" jak go pisać do binarnego żeby tam 0=00 a 1=01?
Bo to nie działa:

void zapisz(string c)
	{
    ofstream("D:\\skrot.bin") << c;
	} 

Odczyt tego co zapisuje pokazuje:
176865049151928e4035d80.png

0

Może lepiej wyjaśnij co ty kombinujesz, możliwe że na całość jest lepsza metoda.

0

Pobieram z pliku binarnego string bitów, przetwarzam i chce go tam wpisać z powrotem w tym samym formacie. Podpowiesz?

nOname miałeś racje ;P

1 użytkowników online, w tym zalogowanych: 0, gości: 1