[dowolny] Proste obliczanie

0

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

0

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

0

Dzięki, a w jakim języku byś sugerował. Możesz wkleić coś przykładowego/podobnego?

0

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;
}
0

Przynajmniej 2 problemy są z tym kodem:
zamiast 0A zapisuje wynik 0D0A;
jak na wejściu jest 1A to wtedy kończy.

0

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

0

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?

0
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()

0

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.

0

no to po odjęciu:

if (x<0)
   x=0
 if (x>255)
   x=255
0
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).

0
    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

1 użytkowników online, w tym zalogowanych: 0, gości: 1