• 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?

VPS Starter Arubacloud
+1 głos
377 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 (251,210 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 (251,210 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,780 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 176 wizyt
pytanie zadane 18 kwietnia 2020 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 9 kwietnia 2020 w Grafika i multimedia przez niko_m Użytkownik (510 p.)
0 głosów
2 odpowiedzi 710 wizyt
pytanie zadane 19 kwietnia 2020 w Systemy operacyjne, programy przez tonn204 Mądrala (7,440 p.)

92,453 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...