Załóżmy, że mam plik. W tym pliku każdy bajt jest liczbą z przedziału 0–255. I chciałbym np. odjąć 5 od każdego z tych bajtów/liczb. Czym to potraktować, żeby uzyskać taki rezultat? Im prostsza metoda tym lepsza. Próbowałem w arkuszu kalkulacyjnym (funkcje hex2dec i dec2hex) ale programista pewnie zrobiłby to inaczej xD
otwierasz plik do odczytu, drugi do zapisu, z pierwszego odczytujesz bajt, rzutujesz na inta odemujesz 5 rzutujesz na byte i zapisujesz do drugiego pliku i tak do końca pierwszego pliku
Dzięki, a w jakim języku byś sugerował. Możesz wkleić coś przykładowego/podobnego?
no myślałem o javie, bo lubię javę, ale w C++ będzie zdecydowanie mniej kodu;]
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream in("BezNazwy1.cpp");
ofstream out("BezNazwy2.cpp");
while(!in.eof())
out.put(in.get()-5);
return 0;
}
Przynajmniej 2 problemy są z tym kodem:
zamiast 0A zapisuje wynik 0D0A;
jak na wejściu jest 1A to wtedy kończy.
Z powyższym już sobie poradziłem dopisując ios::binary.
Ale co teraz można by zrobić, żeby licznik się nie przekręcał jak przekroczy max/min wartość?
Druga rzecz – jak zwiększyć zakres do 0–65535 (czyli jedna liczba w dwóch bajtach zapisana)?
Do Macron (powyżej)
2 bajty = 256*256=65536 :] (chyba, że coś innego masz na myśli)
Mój 3-ci problem – czemu na końcu pliku zapisuje 1 dodatkowy bajt 00?
gościowski napisał(a)
Ale co teraz można by zrobić, żeby licznik się nie przekręcał jak przekroczy max/min wartość?
Druga rzecz – jak zwiększyć zakres do 0–65535 (czyli jedna liczba w dwóch bajtach zapisana)?
ad. licznik - robić licznik większego typu, a o jakij liczniku mówimy?
ad. "bibajt" - robić 2 gety pod rząd i odpowiednio zapisywać w zmiennej 256*get()+get()
Z tym licznikiem chodziło mi, żeby się nie przekręcał, czyli np. jak dodam 5 do 255, to żeby pozostało na 255, a nie się "przekręcał" na 04. Tak samo przy odejmowaniu ma zostać na 00.
no to po odjęciu:
if (x<0)
x=0
if (x>255)
x=255
notexists napisał(a)
ad. "bibajt" - robić 2 gety pod rząd i odpowiednio zapisywać w zmiennej 256*get()+get()
Jak Ty byś to poskładał do kupy? Mi nie wychodzi xP (pierwszy raz się bawię w te rzeczy).
while(in.good()){
int l=in.get()*256;
bool sec;
if(sec=in.good())
l+=in.get();
l-=5;
if(l<0)
l=0;
if(l>65535)
l=65535;
out.put(l/256);
if(sec)
out.put(l%256);
}
co do metody good() to nie wiem czy jest odpowiednia, może eof() albo coś innego się bardziej nada;p