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