Odczyt byte'ow z pliku.

0

Cześć, borykam się z dość dziwnym problemem odczytu danych - bitów z pliku.

Skąd pochodzą dane w pliku:

Napisałem aplikacje w androidzie która odbiera z urządzenia poprzez bluetooth pakiet danych. Instrukcja podaje ze powinien to być pakiet 8 byte, który to każdy pakiet powinien zaczynać się od 01. O dziwo już na etapie androida miałem z tym problem ponieważ sprawdzałem czy nadchodzący każdorazowy pakiet ma długość 9 byte a nie 8, pomijając to to w strumieniu danych byłem w stanie odczytać poszczególne wartości które były nawet zgodne z prawdą. Te same pakiety zapisałem do pliku.

Teraz zaczynają się schody:

Piszę program w c++ który ma za zadanie odczytać ten zapis bitów. Mam coś takiego:

 using std::cout;
using namespace std;
int main()

{
   std::ifstream fin("puls.txt", std::ios::binary);

   if (!fin.is_open()) {

      std::cerr << "Blad otwarcia pliku\n";
      return EXIT_FAILURE;

   }

   std::vector<unsigned char> v; // to zalatwia sprawe fffffow

   
   char ch;
   while(fin >> ch)

      v.push_back(ch); // najpierw wczytamy caly plik do wektora
   char d = v[0]*v[1]; 
   cout << std::hex << static_cast<int>(d) << endl<< endl;


   int pocz = 0, ile = 90; // Od ktorego bajtu i ile bajtow wyswietlic.

   ile += pocz;

   for (int i=pocz, j = v.size(); i<j && i<ile; ++i)

   {
      if (v[i] < 0x10)

         cout << '0'; // wypisz zero w przypadku np. 0x0f

      cout << std::hex << static_cast<int>(v[i]);


      // odstepy:
      if (pocz % 2) {

         if (!(i % 2))

            cout << '|';
      }
      else if (i % 2)

         cout << '|';
   }

   int get;
	    get = _getch();
          

}

01c7|b2ef|bfbd|efbf|bdef|bfbd|efbf|bdef|bfbd|
01c7|b7ef|bfbd|efbf|bdef|bfbd|efbf|bdef|bfbd|
01c7|bbef|bfbd|efbf|bdef|bfbd|efbf|bdef|bfbd|
01c7|bdef|bfbd|efbf|bdef|bfbd|efbf|bdef|bfbd|
01c7|bdef|bfbd|efbf|bdef|bfbd|efbf|bdef|bfbd|

Z niewiadomych przyczyn dostaję 9 paczek po dwa heksy w każdym. Miałby ktoś pomysł co robię źle?

Pozdrawiam
MZ

0
   int c;
   while((c=fin.get())!=EOF)
     {
      unsigned char ch=c;

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