Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z plikiem binarnym.

Ostatnio zmodyfikowano 2011-03-25 16:30
Autor Wiadomość
MrOsamaful
Temat założony przez niniejszego użytkownika
Problem z plikiem binarnym.
» 2011-03-24 23:04:05
Cześć, możecie powiedzieć czemu to nie działa?

C/C++
bool magicCheck( byte input[] )
{
   
    if( input[ 0 ] == 0x4D && input[ 1 ] == 0x44 )
         return 1;
    else
         return 0;
   
}

//[...]

if( magicCheck( input ) )
{
    cout << "Found!";
}

Pomimo tego, że 1 i 2 bajt jest 0x4d i 0x44 to ich nie znajduje, wiecie co jest nie tak?


Tutaj cały source code, jak by to nie wystarczyło.

C/C++
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

typedef char byte;

byte * input;

int getSize( fstream & file )
{
    int begin, end;
    begin = file.tellg();
    file.seekg( 0, ios::end );
    end = file.tellg();
   
    return( end - begin );
}
bool magicCheck( byte * input )
{
   
    if( input[ 0 ] == 0x4D && input[ 1 ] == 0x44 )
         return 1;
    else
         return 0;
   
}
int main()
{
   
    char nazwapliku[ 64 ];
    // Wczytuje nazw pliku
    cin.getline( nazwapliku, 64 );
   
    // Otwiera plik
    fstream file( nazwapliku, ios::binary | ios::in | ios::out );
    if( file.is_open() )
    {
        // Pobiera rozmiar
        cout << "size is: " << getSize( file ) << " bytes.\n";
        // Tworzy tablice, żeby pomieścić cały plik
        input = new byte[ getSize( file ) ];
        // Wczytuje plik
        file.read(( char * ) input, getSize( file ) );
        // Zamyka plik
        file.close();
       
        // Sprawdza czy plik jest podpisany
        if( magicCheck( input ) )
        {
            cout << "Found!";
        }
        else
        {
            cout << "Unsigned file!";
        }
    }
    // Nie da się otworzyć pliku
    else
    {
        cerr << "Couldn't, open the input file!" << endl;
    }
   
    cin.getline( nazwapliku, 1 );
    return 0;
}
P-29701
ison
» 2011-03-24 23:25:16
w funkcji getSize dopisz przed returnem
C/C++
file.seekg( 0, ios::beg );
P-29703
MrOsamaful
Temat założony przez niniejszego użytkownika
» 2011-03-24 23:29:45
Nic to praktycznie nie dało. Wcześniej zawsze pokazywało, że nie znaleziono, a teraz zawsze, że znaleziono, nawet jak poda się złe bajty :/
P-29704
ison
» 2011-03-24 23:32:36
to zmień kompilator, u mnie działa perfekcyjnie ;)

(program sprawdza czy pierwsze 2 bajty to MD)
aaa.txt
MD
output:
size is: 2 bytes.
Found!

aaa.txt
a
MD
output:
size is: 5 bytes.
Unsigned file!
P-29705
MrOsamaful
Temat założony przez niniejszego użytkownika
» 2011-03-25 16:30:38
Jednak działa. Dzięki wielkie.
P-29730
« 1 »
  Strona 1 z 1