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

Otwieranie plików PNG w trybie tekstowym

Object Storage Arubacloud
0 głosów
543 wizyt
pytanie zadane 25 października 2019 w C i C++ przez Ewaryst Ławecki Obywatel (1,710 p.)
Witam,

Mam parę prostych i szybkich pytań.

Dlaczego gdy mam plik PNG i zmienię jego rozszerzenie na TXT i otworzę w C++ to nie czyta nic, oprócz pierwszej linii?

Czy znaki w graficznym pliku otwartym w edytorze tekstu po prostu nie należą do tabeli ASCII i tym jest to spowodowane?

Dodam, że próbuję napisać program szyfrujący pliki za pomocą wyrażenia logicznego XOR.

Czy muszę otworzyć plik w trybie binarnym, czy coś w tym stylu?

 

Będę wdzięczny za każdą podpowiedź i wskazówkę :).
1
komentarz 25 października 2019 przez Patrycjerz Mędrzec (192,320 p.)
Pokaż proszę kod, bo z opisu trudno cokolwiek stwierdzić.
komentarz 25 października 2019 przez Ewaryst Ławecki Obywatel (1,710 p.)
#include <iostream>
#include <fstream>
#include <vector>


using namespace std;


int main()
{

string linia,b;
int h=0;
fstream plik;
vector <string> dane;


cout<<"Podaj klucz: ";
cin >> b;


plik.open("zaszyfruj.txt",ios::in);
while(!plik.eof())
{
    getline(plik,linia);
    dane.push_back(linia);
}
plik.close();

for(int j=0;j<dane.size();j++)
{

h=0;
for(int i=0;i<dane[j].length();i++)
{
    dane[j][i]^=b[h];
    h++;
    if(h>b.length())
    h=0;

}

}


plik.open("szyfr.txt",ios::out);
for(int i=0;i<dane.size();i++)
    plik<<dane[i]<<endl;
plik.close();


for(int j=0;j<dane.size();j++)
{

h=0;
for(int i=0;i<dane[j].length();i++)
{
    dane[j][i]^=b[h];
    h++;
    if(h>b.length())
    h=0;

}

}


plik.open("odszyfr.txt",ios::out);

for(int i=0;i<dane.size();i++)
    plik<<dane[i]<<endl;


plik.close();



return 0;
}

 

komentarz 25 października 2019 przez Ewaryst Ławecki Obywatel (1,710 p.)
Dla normalnych plików tekstowych działa ok, problem pojawia się gdy chcę zaszyfrować te graficzne krzaki.

1 odpowiedź

+1 głos
odpowiedź 25 października 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 25 października 2019 przez Ewaryst Ławecki
 
Najlepsza

Czy muszę otworzyć plik w trybie binarnym, czy coś w tym stylu?

Powinieneś, tak. Inaczej to co wczytasz do programu może być inne niż faktyczna zawartość pliku (to samo z zapisem).

Dlaczego gdy mam plik PNG i zmienię jego rozszerzenie na TXT i otworzę w C++ to nie czyta nic, oprócz pierwszej linii?

Zależy jak to zrobiłeś i jak sprawdzasz ile jest linii. Jak pokażesz jak to robisz, to będę mógł więcej powiedzieć.

Ogólnie pojęcie "linii" nie ma sensu dla plików nie-tekstowych.

Być może w pliku nie było ani jednego bajtu o wartości \n, więc program potraktował cały plik jako jedną "linię".

(btw zmiana rozszerzenia nie ma żadnego znaczenia dla programów, to tylko podpowiedź jakiego formatu oczekiwać)

Czy znaki w graficznym pliku otwartym w edytorze tekstu po prostu nie należą do tabeli ASCII i tym jest to spowodowane?

Nie ma związku. Edytor tekstu spróbuje przeczytać dane z jakimś kodowaniem (UTF8, Windows-1250, ISO-8859-2... lub innym), a kombinacji bajtów których nie rozumie nie pokaże lub pokaże jakiś znak zastępczy. ASCII sam z siebie obejmuje tylko połowę możliwych wartości bajta (właśnie współczesne kodowania rozszerzają ASCII wykorzystując drugą połowę zakresu), więc edytory w zasadzie nigdy samego ASCII nie używają.

Przy działaniu na danych nie-tekstowych, jak na przykład pliku PNG - tematy linii, ASCII, kodowań etc nie mają w ogóle miejsca.

komentarz 25 października 2019 przez Ewaryst Ławecki Obywatel (1,710 p.)
Wyczerpałeś dla mnie temat totalnie :D. Czyli teraz próbuję binarnie.

Dziękuje Ci bardzo i życzę miłego wieczoru :).
komentarz 25 października 2019 przez adrian17 Ekspert (344,860 p.)
Pokaż kod jak skończysz, to też skomentuję ;)

Podobne pytania

0 głosów
1 odpowiedź 641 wizyt
pytanie zadane 2 marca 2016 w C i C++ przez Waszek Gaduła (4,130 p.)
+2 głosów
2 odpowiedzi 327 wizyt
0 głosów
1 odpowiedź 238 wizyt
pytanie zadane 19 maja 2020 w C i C++ przez AlciaAlcia Nowicjusz (120 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...