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

Pliki binarne, wydobywanie informacji bajt po bajcie.

Ostatnio zmodyfikowano 2014-12-31 15:37
Autor Wiadomość
Boriano
Temat założony przez niniejszego użytkownika
Pliki binarne, wydobywanie informacji bajt po bajcie.
» 2014-12-31 00:01:47
Witam!
Mam do zrobienia program symulujący protokół 1-wire. Muszę oddzielnie stworzyć plik binarny, w którym są podane informacje o komunikacji następująco : 1 bajt (n) mówiący o liczbie bajtów wysłanych przez urządzenie master a następnie n bajtów opisujących tą komunikacje.

Mój problem polega na tym, że nie bardzo wiem jak mogę wydobyć tą informację o bajtach a później wykorzystać ją do wydobycia odpowiedniej liczby bitów.

Do tej pory udało mi się zrobić coś takiego.
Będę wdzięczny za wszelką pomoc!

C/C++
// 1-wire.cpp: Określa punkt wejścia dla aplikacji konsoli.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <bitset> 
#include <cstdint>

using namespace std;


void read_rom( ifstream & plik );
void match_rom( ifstream & plik );
void skip_rom( ifstream & plik );
void search_rom( ifstream & plik );


int main()
{
   
    char nazwapliku[ 80 ];
    int k;
    ifstream plik;
   
    cin >> nazwapliku;
   
    plik.open( nazwapliku, ios::in | ios::binary );
    if( !plik ) // sprawdzenie poprawności otwarcia
    {
        cout << "Nieudane otwarcie pliku " << nazwapliku << endl;
        system( "pause" );
    }
   
    while( !plik.eof() )
    {
        plik.read( reinterpret_cast < char *>( & k ), sizeof( k ) );
        if( k == 51 )
        {
            uint8_t a;
           
            plik.read( reinterpret_cast < char *>( & a ), sizeof( a ) );
           
            if( int( a ) == 8 )
            {
                bitset < 64 > foo;
                plik.read( reinterpret_cast < char *>( & foo ), sizeof( foo ) );
                cout << "Podlaczone jest jedno urzadzenie " << endl;
                cout << "Numer tego urzadzenia to " << endl << foo << endl;
            }
            else cout << "Nie jest podlaczone zadane urzadzenie" << endl;
           
        }
       
        else if( k == 85 )
        {
            bitset < 64 > foo;
            plik.read( reinterpret_cast < char *>( & foo ), sizeof( foo ) );
            cout << "Master zarzadal polaczenia z urzazeniem slave o numerze " << endl << foo << endl << endl;
        }
       
        cout << "Koniec danych w pliku!" << endl;
       
        system( "pause" );
        return 0;
    }
P-123711
1aam2am1
» 2014-12-31 00:06:08
plik.read( reinterpret_cast < char *>( & k ), sizeof( k ) ); //tu masz błąd

reinterpret_cast - najlepiej nie używać jeżeli nie musisz static_cast wystarczy

sizeof( k ) - chciałeś chyba wczytać 1 bajt a wczytujesz sizeof(int) bajtów

Najlepiej zamień int k; na char k;
P-123712
Boriano
Temat założony przez niniejszego użytkownika
» 2014-12-31 15:37:51
No ja właśnie próbowałem to robić na charach ale nie bardzo to wychodzi bo zapisuje sobie w oddzielnym programie liczbę 51 w dwójkowym czyli 00110011 i jak później w tym głównym programie chce to jakoś w ifie porównać to nie wychodzi tak jak powinno.
Chyba, że coś źle zapisuje do pliku, już sam nie wiem.
P-123739
« 1 »
  Strona 1 z 1