Gå til innhold

litt oppstartshjelp ? operasjoner


Anbefalte innlegg

Hepp ! Jeg har to .bin filer som jeg har lest inn i hver sine buffere. Jeg skal med nr#1:

 

loope gjennom hver byte, øke alle som er større enn 30(hex) med 1, og alle som er mindre enn 2A(hex) skal økes med 2.

 

ta vekk byte nr# 2, 4, 6, 8 ...

 

buffer1 & buffer2 (bitwise AND ) på hver byte helt til en av bufferne er ferdig.

 

i resultatet skal man XORe hver byte med sin egen verdi.

 

legge sammen alle bytene, og vise tallet på skjermen.

 

Hittil har jeg lest inn filene og funnet størrelsen av hver.

#include <iostream>
#include <fstream>
using namespace std;

int main(){

//read ch file
char* buffer;
long size;
ifstream file("huge_ch.bin", ios::in|ios::binary|ios::ate);
size = file.tellg();
file.seekg(0, ios::beg);
file.read(buffer, size);
file.close();

cout<<"read huge_ch.bin finished\n";


//read xor file
char* bufferx;
long sizex;
ifstream filex("hugex0r.bin", ios::in|ios::binary|ios::ate);
sizex = filex.tellg();
filex.seekg(0, ios::beg);
filex.read(bufferx, sizex);
filex.close();

cout<<"read hugex0r.bin finished\n";


//add to some
char* place = buffer;
for(int i=0;i<size;i++){
 if(place[i]<48){place[i]+=1;};
 cout<<place[i];
}


delete[] buffer;
delete[] bufferx;
system("pause");
return 0;
}

Lenke til kommentar
Videoannonse
Annonse

Ok, kan paste oppgaven min.

Får det ikke til å virke. Hvordan regner man f.eks. med hex values i C++ ? Gjøre dem om til titallssystemet slik jeg har gjort?

 

oppgave:

 

 

# download this file. Process every byte, if it is greater than 30 (hex) then add 1 to it. If it is smaller than 2A (hex) then add 2 to it.

 

# Reduce the filesize by half by taking every second byte out of the file (delete the second, the fourth etc). Put the result into part1.dat.

 

# Take this file AND (the & operator) each byte with part1.dat. Finish when any end of file (whichever is first) is reached.

 

# Put the result into a file called part2.dat.

Take part2.dat and XOR(the ^ operator) each byte of it with its own value and put the result into a new file called part3.dat.

 

# Finally take part3.dat and add (+) every byte together, append _solution to the resulting number, and enter it in the box below.

Lenke til kommentar
Hvordan regner man f.eks. med hex values i C++ ?

#include <iostream>

using namespace std;


int main()
{
int a = 0xa + 0x1e;
cout << a << endl;

return(0);
} // main

..skriver ut summen av 0A og 1E.

 

oppgave:

..blabla..

 

Jaha? For en hundrings (ellernoe..heh) kan du få løsningen/kildekoden av meg. Hvis ikke det høres bra nok ut for deg er det bare å sette i gang å lese slik alle andre her har måttet gjøre:

http://nostdal.ath.cx/cgi-bin/ciki?do=view&page=9 ("Free books about C++")

 

Edit:

(eventuellt satse på at noen her har så lite å gjøre at de gidder å gjøre det gratis for deg)

Endret av søppel
Lenke til kommentar

Ja selvfølgelig trenger man kode. Hvordan skal vi ellers kunne se hva som er galt?

Men jeg tipper at du har en referanse som ikke er gyldig. At du returnerer et lokalt/temp objekt fra en funksjon som returnerer T& f.eks.

Lenke til kommentar

#include <iostream>
#include <fstream>
using namespace std;

char* buffer1;

int main(){

//read ch file
char* buffer;
long size;
ifstream file("huge_ch.bin", ios::in|ios::binary|ios::ate);
size = file.tellg();
file.seekg(0, ios::beg);
file.read(buffer, size);
file.close();

cout<<"read huge_ch.bin finished\n";


//read xor file
char* bufferx;
long sizex;
ifstream filex("hugex0r.bin", ios::in|ios::binary|ios::ate);
sizex = filex.tellg();
filex.seekg(0, ios::beg);
filex.read(bufferx, sizex);
filex.close();

cout<<"read hugex0r.bin finished\n";


//add some
for(int i=0;i<size;i++){
 if(buffer[i]<0x30){
 	buffer[i]+=1;
 };
 if(buffer[i]>0x2A){
 	buffer[i]+=1;
 };
 cout<<buffer[i];
}


//delete half
for(int i=2, n=0;i<size;i+=2, n++){
 buffer1[n]=buffer[i];
}


delete[] buffer1;
delete[] buffer;
delete[] bufferx;
system("pause");
return 0;
}

 

Feilen finner jeg i den første for loopen. muligens den andre også, har ikke kommet så langt. Gjerne se etter om koden gjør det den skal også.

Lenke til kommentar

Har du hørt om å allokere plass?

char* buffer; <-- den peker bare på en char. For at du skal få plass til mange bokstaver der må du gjøre char* buffer = new char[3]; da har du plass til 3 bokstaver. Det er det som er feil.

Lenke til kommentar

visste at det var noe... Har drevet med ganske mye andre rare språk etter at jeg leste Sam's TYC++ 5, så jeg har glemt en del... :blush:

Takk så mye.

 

ps. new char[3], har ikke den plass til fire bokstaver, eller var den siste termineringstegn eller noe ?

Endret av Zethyr
Lenke til kommentar

Geek_nr4 fatal error LNK1201: error writing to program database 'c:\Documents and Settings\Magnus\Mine dokumenter\Visual Studio Projects\Geek_nr4\Debug\Geek_nr4.pdb'; check for insufficient disk space, invalid path, or insufficient privilege

 

 

Har ikke gjort noenting, og jeg har mer enn nok diskplass.

 

 

ps: satte på noen

char* buffer = new char[]; , men fikk samme error som ovenfor, bare litt tidligere.

 

(uff, lenge siden jeg drev med dette, men artig å lære)

 

edit: bare compileren som ikke likte det, copy-pastet koden inn i nytt prosjekt, så fungerer alt hittil.

Endret av Zethyr
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...