• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zły odczyt z pliku binarnego

Object Storage Arubacloud
0 głosów
201 wizyt
pytanie zadane 1 maja 2016 w C i C++ przez zkkf56 Dyskutant (8,710 p.)

Witam,

Chodzi oto że po zastąpieniu zwykłych pytań (w notatniku) kodem binarnym, pytania nie odczytują się.

(oczywiście dodałem ios::binary). Moje pytania na kod binarny zamieniłem na stronie: http://nickciske.com/tools/binary.php

Oto mój kod:

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <cstring>
#include <windows.h>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <time.h>

using namespace std;

char *tr(char *str)
{
   static char buff[256];
   char cp[]="\245\206\251\210\344\242\230\276\253\244\217\250\235\343\340\227\275\215ąćęłńóśżźĄĆĘŁŃÓŚŻŹ";
   if(strlen(str)>=sizeof(buff)) return str;
   char *bf=buff;
   while(*str)
     {
      char *pos=strchr(cp+18,*str);
      *(bf++)=pos?*(pos-18):*str;
      ++str;
     }
   *bf=0;
   return buff;
}

int monety, monety_z_pliku, wybor, wybierz_quiz;
//do odczytu z pliku
string temat, nick;
string tresc[11];
string odpA[11], odpB[11], odpC[11], odpD[11];
string poprawna[11];
string odpowiedz;
//Do fstream
int nr_linii=1;
string linia;
int nr_pytania=0;
int punkty=0;
//do losowania
    int ile_pytan = 10; //z ilu pytan losujemy?
    int ile_wylosowac = 10; //ile pytan wylosowac?
    int ile_juz_wylosowano=0; //zmienna pomocnicza
    int *wylosowane = new int[ile_wylosowac+1]; //rezerwacja tablicy
    bool losowanie_ok;

int main()
{
    HANDLE hOut;
    hOut = GetStdHandle( STD_OUTPUT_HANDLE );

    cout << tr("-----MENU GŁÓWNE-----")<<endl;
    SetConsoleTextAttribute(hOut, FOREGROUND_BLUE);

    cout << tr("1.Wybierz Quiz")<<endl;
    cout << tr("2.Sklep")<<endl;
    cout << tr("3.Wyjdź z gry")<<endl;
    wybor=getch();
    switch(wybor)
    {
        case '1':
        {
                HANDLE hOut;
    hOut = GetStdHandle( STD_OUTPUT_HANDLE );

    cout << "--------------------"<<endl;

    SetConsoleTextAttribute(hOut, 0x0006);

    cout << tr("Dostępne quizy:")<<endl;
    SetConsoleTextAttribute(hOut, 0x00080);
    cout << tr("1.World Of Tanks")<<endl;
    SetConsoleTextAttribute(hOut, 0x0002);
    cout << tr("2.Minecraft")<<endl;
    SetConsoleTextAttribute(hOut, 0x0004);
    cout << tr("3.Programowanie w c++")<<endl;
    SetConsoleTextAttribute(hOut, 0x0001);
    cout << "-----------------------------------"<<endl;
    cout << tr("Twój wybór:");
    wybierz_quiz=getch();
    switch(wybierz_quiz)
    {
        case '1':
        {

    fstream plik;
    plik.open("quizy/wot.txt",ios::in | ios::binary);

    if (plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: temat=linia;                     break;
            case 2: nick=linia;                      break;
            case 3: tresc[nr_pytania] = linia;       break;
            case 4: odpA[nr_pytania] = linia;        break;
            case 5: odpB[nr_pytania] = linia;        break;
            case 6: odpC[nr_pytania] = linia;        break;
            case 7: odpD[nr_pytania] = linia;        break;
            case 8: poprawna[nr_pytania] = linia;    break;
        }

        if (nr_linii==8) {nr_linii=2; nr_pytania++;}
        nr_linii++;
    }

    plik.close();

    for (int i=0; i<=9; i++)
    {
        for (int w=1; w<=ile_wylosowac; w++)
        {
		do
		{
		    srand(time(NULL));
            w=rand()%ile_pytan+1; //losowanie w C++
            losowanie_ok=true;

			for (int j=1; j<=ile_juz_wylosowano; j++)
			{
				//czy liczba nie zostala juz wczesniej wylosowana?
				if (w==wylosowane[j]) losowanie_ok=false;
			}

			if (losowanie_ok==true)
			{
				//mamy unikatowa liczbe, zapiszmy ja do tablicy
				ile_juz_wylosowano++;
				wylosowane[ile_juz_wylosowano]=w;
			}
		} while(losowanie_ok!=true);

        SetConsoleTextAttribute(hOut, 0x0003);
        cout<<endl<<tresc[w]<<endl;
        SetConsoleTextAttribute(hOut, 0x0008);
        cout<<"-----------------------"<<endl;
        SetConsoleTextAttribute(hOut, 0x0006);
        cout<<"A. "<<odpA[w]<<endl;
        cout<<"B. "<<odpB[w]<<endl;
        cout<<"C. "<<odpC[w]<<endl;
        cout<<"D. "<<odpD[w]<<endl;
        SetConsoleTextAttribute(hOut, 0x0008);
        cout<<"------------------------"<<endl;
        SetConsoleTextAttribute(hOut, 0x0002);
        cout<<"Twoja odpowiedz: ";
        cin>>odpowiedz;

        transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);

        if (odpowiedz==poprawna[w])
        {
            cout<<"Dobrze! Zdobywasz punkt!"<<endl;
            punkty++;
        }
        else cout<<"Zle! Brak punktu! Poprawna odpowiedz: "<<poprawna[w]<<endl;
        }
        }


        }

        case '2':
        {

    fstream plik;
    plik.open("quizy/minecraft.txt",ios::in);

    if (plik.good()==false)
    {
        cout<<"Nie udalo sie otworzyc pliku!";
        exit(0);
    }

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: temat=linia;                     break;
            case 2: nick=linia;                      break;
            case 3: tresc[nr_pytania] = linia;       break;
            case 4: odpA[nr_pytania] = linia;        break;
            case 5: odpB[nr_pytania] = linia;        break;
            case 6: odpC[nr_pytania] = linia;        break;
            case 7: odpD[nr_pytania] = linia;        break;
            case 8: poprawna[nr_pytania] = linia;    break;
        }

        if (nr_linii==8) {nr_linii=2; nr_pytania++;}
        nr_linii++;
    }

    plik.close();

    for (int i=0; i<=9; i++)
    {
        for (int w=1; w<=ile_wylosowac; w++)
        {
		do
		{
		    srand(time(NULL));
            w=rand()%ile_pytan+1; //losowanie w C++
            losowanie_ok=true;

			for (int j=1; j<=ile_juz_wylosowano; j++)
			{
				//czy liczba nie zostala juz wczesniej wylosowana?
				if (w==wylosowane[j]) losowanie_ok=false;
			}

			if (losowanie_ok==true)
			{
				//mamy unikatowa liczbe, zapiszmy ja do tablicy
				ile_juz_wylosowano++;
				wylosowane[ile_juz_wylosowano]=w;
			}
		} while(losowanie_ok!=true);

        SetConsoleTextAttribute(hOut, 0x0003);
        cout<<endl<<tresc[w]<<endl;
        SetConsoleTextAttribute(hOut, 0x0008);
        cout<<"-----------------------"<<endl;
        SetConsoleTextAttribute(hOut, 0x0006);
        cout<<"A. "<<odpA[w]<<endl;
        cout<<"B. "<<odpB[w]<<endl;
        cout<<"C. "<<odpC[w]<<endl;
        cout<<"D. "<<odpD[w]<<endl;
        SetConsoleTextAttribute(hOut, 0x0008);
        cout<<"------------------------"<<endl;
        SetConsoleTextAttribute(hOut, 0x0002);
        cout<<"Twoja odpowiedz: ";
        cin>>odpowiedz;

        transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower);

        if (odpowiedz==poprawna[w])
        {
            cout<<"Dobrze! Zdobywasz punkt!"<<endl;
            punkty++;
        }
        else cout<<"Zle! Brak punktu! Poprawna odpowiedz: "<<poprawna[w]<<endl;
        }
        }


        }


        case '3':
        {

        }
    }
    }
    getchar();getchar();
    system("cls");


        case '2':
        {

        }

        case '3':
        {

        }
    }

    getchar();getchar();
    system("cls");

    return 0;
}

(Jeśli komuś jest to potrzebne) zawartość notatnika

01010111011011110111001001101100011001000010000001001111011001100010000001110100011000010110111001101011011100110000110100001010011110100110101101101011011001100011010100110110000011010000101001001110011000010110101001100011011010010110010101111010011100110111101001111001001000000110001101111010011011110110110001100111001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100100100101010011001011010011011100001101000010100100110101100001011101010111001100001101000010100100010100101101001100010011000000110000000011010000101000110001001100100011000100001101000010100110001000001101000010100100101101110100011011110111001001100001001000000111011101100101011100100111001101101010011000010010000001111010011011110111001101110100011000010110110001100001001000000111011101110000011100100110111101110111011000010110010001111010011011110110111001100001001000000111011100100000011011000111010101110100011110010110110100100000001100100011000000110001001101100010000001110010011011110110101101110101001111110000110100001010001110010010111000111001000011010000101000111001001011100011000100110011000011010000101000111001001011100011000100110111000011010000101000111001001011100011000100110100000011010000101001100100000011010000101001010111001000000110110001101111011100110110111101110111011001010110101000100000011000100110100101110100011101110110100101100101001000000010100001010111011001010111001001110011011010100110000100100000001110010010111000110001001101000010100100100000011001110111001001100001001110100000110100001010001100010011010100100000011000110111101001101111011011000110011101101111011101110010000001110110011100110010000000110001001101010010000001100011011110100110111101101100011001110110111101110111000011010000101000110001001100000010000001100011011110100110111101101100011001110110111101110111001000000111011001110011001000000011000100110000001000000110001101111010011011110110110001100111011011110111011100001101000010100011001000110000001000000110001101111010011011110110110001100111011011110111011100100000011101100111001100100000001100100011000000100000011000110111101001101111011011000110011101101111011101110000110100001010001100010011010100100000011000110111101001101111011011000110011101101111011101110010000001110110011100110010000000110001001100010010000001100011011110100110111101101100011001110110111101110111000011010000101001100001000011010000101001001010011000010111000001101111110001011000010001110011011010110110100100100000011000110111101001101111011011000110011100100000011101000110111100111010000011010000101001001001010100110010110100110111000011010000101001001011010101100010110100110011000011010000101001010011010101000100000100101101001100010000110100001010010001100101011000110011001100000011010000001101000010100110001100001101000010100011001000100000011011100110000101101010011000110110100111000100100110011100010110111100011100110111101001111001001000000110001101111010011011110110110001100111001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100100100101010011001011010011010000001101000010100101010000110001001100000000110100001010010001010010110100110001001100000011000000001101000010100100010100101101001101010011000000100000011011010000110100001010011000110000110100001010010011100110100101110011011110100110001101111010011110010110001101101001011001010110110000100000011000110111101001101111011011000110011101101111011101110010000001110100011011110011101000001101000010100100110100110100001100010010000001010111011000010110110001101011011001010111001000100000010000100111010101101100011011000110010001101111011001110000110100001010010100110101010100101101001101010000110100001010010101000011011000110111000011010000101001001101001101000100000100110011010001010011001000001101000010100110001100001101000010100100111001100001011010100111001101111010011110010110001001110011011110100110000100100000011000010110110001110100011110010110110001100101011100100110100101100001001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100101001101010101001011010011001000110110000011010000101001000110010101100011001100110000001101000000110100001010010000010010110100110010001100000000110100001010010010000110010101101100011011000110001101100001011101000000110100001010011000100000110100001010010100100110111101110011011110010110101001110011011010110110100100100000011000110111101001101111011011000110011100100000001100010010000001110100011010010110010101110010011101010010000001110100011011110011101000001101000010100100110101010011001011010011000100001101000010100101010000110001000011010000101001001011010101100010110100110001000011010000101001010010010001010100111001000001010101010100110001010100001000000100011001010100000011010000101001100001000011010000101001000011011110100110111101101100011001110010000000110111001000000111010001101001011001010111001001110101001000000111010001101111001110100000110100001010010010010101001100101101001101000000110100001010010011010011010000110001001000000101011101100001011011000110101101100101011100100010000001000010011101010110110001101100011001000110111101100111000011010000101001001000011001010110110001101100011000110110000101110100000011010000101001001101001101000100000100110011010001010011001000001101000010100110001000001101000010100101011101101111011100100110110001100100001000000100111101100110001000000101010001100001011011100110101101110011001000000111011100100000001100100011000000110001001101100010000001110010011011110110101101110101001000000110110101100001001110100000110100001010001100110010000001101100011000010111010001100001000011010000101000110001001100000010000001101100011000010111010000001101000010100011011100100000011011000110000101110100000011010000101000110101001000000110110001100001011101000000110100001010011001000000110100001010000011010000101000001101000010100000110100001010111011111011111110111101

Z góry dziękuję :-)

komentarz 1 maja 2016 przez zkkf56 Dyskutant (8,710 p.)
PS. próbowałem zmieniać rozszerzenie na bin :)
1
komentarz 2 maja 2016 przez niezalogowany

Jeżeli to:

01010111011011110111001001101100011001000010000001001111011001100010000001110100011000010110111001101011011100110000110100001010011110100110101101101011011001100011010100110110000011010000101001001110011000010110101001100011011010010110010101111010011100110111101001111001001000000110001101111010011011110110110001100111001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100100100101010011001011010011011100001101000010100100110101100001011101010111001100001101000010100100010100101101001100010011000000110000000011010000101000110001001100100011000100001101000010100110001000001101000010100100101101110100011011110111001001100001001000000111011101100101011100100111001101101010011000010010000001111010011011110111001101110100011000010110110001100001001000000111011101110000011100100110111101110111011000010110010001111010011011110110111001100001001000000111011100100000011011000111010101110100011110010110110100100000001100100011000000110001001101100010000001110010011011110110101101110101001111110000110100001010001110010010111000111001000011010000101000111001001011100011000100110011000011010000101000111001001011100011000100110111000011010000101000111001001011100011000100110100000011010000101001100100000011010000101001010111001000000110110001101111011100110110111101110111011001010110101000100000011000100110100101110100011101110110100101100101001000000010100001010111011001010111001001110011011010100110000100100000001110010010111000110001001101000010100100100000011001110111001001100001001110100000110100001010001100010011010100100000011000110111101001101111011011000110011101101111011101110010000001110110011100110010000000110001001101010010000001100011011110100110111101101100011001110110111101110111000011010000101000110001001100000010000001100011011110100110111101101100011001110110111101110111001000000111011001110011001000000011000100110000001000000110001101111010011011110110110001100111011011110111011100001101000010100011001000110000001000000110001101111010011011110110110001100111011011110111011100100000011101100111001100100000001100100011000000100000011000110111101001101111011011000110011101101111011101110000110100001010001100010011010100100000011000110111101001101111011011000110011101101111011101110010000001110110011100110010000000110001001100010010000001100011011110100110111101101100011001110110111101110111000011010000101001100001000011010000101001001010011000010111000001101111110001011000010001110011011010110110100100100000011000110111101001101111011011000110011100100000011101000110111100111010000011010000101001001001010100110010110100110111000011010000101001001011010101100010110100110011000011010000101001010011010101000100000100101101001100010000110100001010010001100101011000110011001100000011010000001101000010100110001100001101000010100011001000100000011011100110000101101010011000110110100111000100100110011100010110111100011100110111101001111001001000000110001101111010011011110110110001100111001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100100100101010011001011010011010000001101000010100101010000110001001100000000110100001010010001010010110100110001001100000011000000001101000010100100010100101101001101010011000000100000011011010000110100001010011000110000110100001010010011100110100101110011011110100110001101111010011110010110001101101001011001010110110000100000011000110111101001101111011011000110011101101111011101110010000001110100011011110011101000001101000010100100110100110100001100010010000001010111011000010110110001101011011001010111001000100000010000100111010101101100011011000110010001101111011001110000110100001010010100110101010100101101001101010000110100001010010101000011011000110111000011010000101001001101001101000100000100110011010001010011001000001101000010100110001100001101000010100100111001100001011010100111001101111010011110010110001001110011011110100110000100100000011000010110110001110100011110010110110001100101011100100110100101100001001000000111011100100000011001110111001001111010011001010010000001110100011011110011101000001101000010100101001101010101001011010011001000110110000011010000101001000110010101100011001100110000001101000000110100001010010000010010110100110010001100000000110100001010010010000110010101101100011011000110001101100001011101000000110100001010011000100000110100001010010100100110111101110011011110010110101001110011011010110110100100100000011000110111101001101111011011000110011100100000001100010010000001110100011010010110010101110010011101010010000001110100011011110011101000001101000010100100110101010011001011010011000100001101000010100101010000110001000011010000101001001011010101100010110100110001000011010000101001010010010001010100111001000001010101010100110001010100001000000100011001010100000011010000101001100001000011010000101001000011011110100110111101101100011001110010000000110111001000000111010001101001011001010111001001110101001000000111010001101111001110100000110100001010010010010101001100101101001101000000110100001010010011010011010000110001001000000101011101100001011011000110101101100101011100100010000001000010011101010110110001101100011001000110111101100111000011010000101001001000011001010110110001101100011000110110000101110100000011010000101001001101001101000100000100110011010001010011001000001101000010100110001000001101000010100101011101101111011100100110110001100100001000000100111101100110001000000101010001100001011011100110101101110011001000000111011100100000001100100011000000110001001101100010000001110010011011110110101101110101001000000110110101100001001110100000110100001010001100110010000001101100011000010111010001100001000011010000101000110001001100000010000001101100011000010111010000001101000010100011011100100000011011000110000101110100000011010000101000110101001000000110110001100001011101000000110100001010011001000000110100001010000011010000101000001101000010100000110100001010111011111011111110111101

Wkleiłeś do pliku tak po prostu otwierając go notatnikiem i wkljając ten ciąg zer i jedynek to nie ma prawa to działać, bo wkleiłeś tekst, a nie binarne dane.

Konkretnie twój plik to ciąg 0x30 (kod ASCII: czyli "0") oraz 0x31 (czyli "1")

komentarz 2 maja 2016 przez zkkf56 Dyskutant (8,710 p.)
A skąd wziąć binarne dane ?
komentarz 2 maja 2016 przez zkkf56 Dyskutant (8,710 p.)
I jak wkleić je i odczytać ?
1
komentarz 2 maja 2016 przez niezalogowany
Najłatwiej jest chyba napisać program, który zapisze te same dane trybie binarnym (btw  z tego co widzę to masz tekst, więc taki plik zapisany w trybie binarnym po normalnym otworzeniu w edytorze wciąż będzie czytelny), albo jeżeli miałbyś mniej tych danych to możesz bawić się jakimś hex edytorem (ale to tylko do zmieniania pojedynczych fragmentów).

Jak wspomniałem w rezultacie otrzymasz plik, który będzie przypominał oryginał, a to dlatego że taki notatnik będzie próbował interpretować wszystkie znaki jako ASCII

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 208 wizyt
+1 głos
0 odpowiedzi 250 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez Dawid679 Nowicjusz (130 p.)
0 głosów
2 odpowiedzi 253 wizyt
pytanie zadane 14 lipca 2016 w C i C++ przez victordeleco2 Użytkownik (920 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...