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

jak zamienić konkretny bajt w pliku?

Object Storage Arubacloud
+1 głos
387 wizyt
pytanie zadane 17 listopada 2020 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

Mam plik który ma w sobie zapisane 12 liczb tak że każda kolejna znajduję się w kolejnym bajcie, i chce zamienić środkową z tych liczb na inną. Jakiej funkcji użyć? Przykładowy kod jeżeli niejasno napisałem

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    fstream file;

    int index;
    int number;

    file.open( "info.txt", ios::in );

    cout << "podaj indeks bajtu w ktorym chcesz zamienic liczbe: "; cin >> index;
    cout << "podaj liczbe: "; cin >> number;
    
    // funkcja ktora na pozycji index zmieni wartość bajtu na number
    
    file.close();

    return 0;
}

Btw, co napisać żeby cin >> char; wczytywał zmienną która jest liczbą? Tzn że jak napisze 123 to on wczyta 123 a nie '1'?

komentarz 17 listopada 2020 przez VBService Ekspert (253,340 p.)

Btw, co napisać żeby cin >> char; wczytywał zmienną która jest liczbą? Tzn że jak napisze 123 to on wczyta 123 a nie '1'?

char* and cin in C++

komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 p.)

Nie o to mi chodzi. Mam zmienną typu char i chcę do niej wpisać liczbę. Przykładowo

char x;
cin >> x;
cout << x;

I jeżeli wpisze "65" to wypisze mi na ekranie "A". Wszystko bez cudzysłowu oczywiście

Wydaje mi się że jest jakaś funkcja która informuje std::cin że będą wpisywane wartości binarne a nie tekstowe

komentarz 17 listopada 2020 przez VBService Ekspert (253,340 p.)
    int i;
    std::cout << "podaj: ";
    std::cin >> i;
    std::cout << "\n";
    std::cout << (char)i;

komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 p.)
Tylko chce żeby ta zmienna i była typu char

1 odpowiedź

+3 głosów
odpowiedź 17 listopada 2020 przez tangarr Mędrzec (154,860 p.)
wybrane 17 listopada 2020 przez Daaa22
 
Najlepsza

Musisz otworzyć plik w trybie binarnym. Pamiętaj, że jeden bajt przechowuje liczbę z zakresu 0-255. Typ int zazwyczaj zajmuje 4 bajty.
Jeżeli chcesz zmodyfikować konkretny bajt pliku musisz go otworzyć w trybie do zapisu i odczytu. Aby przejść w konkretne miejsce w pliku użyj funkcji seekg

komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 p.)

Pogubiłem się w tym. Dasz radę edytować mój kod żeby poprawnie działało a ja to przeanalizuje?

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    fstream file;

    int index;
    char number;

    file.open( "info.txt", ios::in | ios::out | ios::binary );

    cout << "podaj indeks bajtu w ktorym chcesz zamienic liczbe: "; cin >> index;
    cout << "podaj liczbe: "; cin >> number; //w tym miejscu chce zeby number zostal wczytany jako wartosc liczbowa a nie znak

    file.seekg( index );

//w tym miejscu chce zeby bajt na aktualnej pozycji zamienił sie na wartosc number

    return 0;
}

 

komentarz 17 listopada 2020 przez Daaa22 Dyskutant (8,250 p.)
Dobra już wiem co i jak. Myślałem że jak przesunę ten wskaźnik to program w tym pliku dopisze, a nie zamieni, to co jest w tym bajcie. A jak zrobić że w danym miejscu pliku dopisać bajt?
1
komentarz 17 listopada 2020 przez Oscar Nałogowiec (29,290 p.)
edycja 17 listopada 2020 przez Oscar
Plik to taka tablica bajtów, tyle że na dysku. Jeśli chciałbyś coś dopisać w środku najpierw trzeba pozostałą (za miejscem dopisania) zawartość tablicy przepisać trochę dalej. To może trwać bardzo długo, dłużej niż zapisanie pliku po prostu od początku.

 

Jako ciekawostka: w "dużych" systemach operacyjnych, tych z pamięcią wirtualną, jest zwykle możliwość "mapowania pliku w pamięci". Oznacza to udostępnienie przez system obszaru pamięci (dokładniej to przestrzeni adresowej), którego zawartość jest bezpośrednio odwzorowywana na zawartość pliku (o odwrotnie). Chyba nie jest to udostępniane przez standadrowe biblioteki C, trzeba używać bezpośrednio funkcji systemu operacyjnego. Ta technika może być lepsza do takiego dość "swobodnego" dostępu do pliku.

Podobne pytania

+1 głos
2 odpowiedzi 188 wizyt
pytanie zadane 18 kwietnia 2020 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 209 wizyt
pytanie zadane 9 kwietnia 2020 w Grafika i multimedia przez niko_m Użytkownik (510 p.)
0 głosów
2 odpowiedzi 737 wizyt
pytanie zadane 19 kwietnia 2020 w Systemy operacyjne, programy przez tonn204 Mądrala (7,440 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!

...