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

dekodowanie wartości bajta

Ostatnio zmodyfikowano 2015-09-30 12:22
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
dekodowanie wartości bajta
» 2015-09-30 11:22:04
Część :) Mam taki problem. Otóż mam obiekt typu uint8_t (wielkość 1-bajt) ... i wiem , że na co drugim bicie jest inna informacja. Jak się uzyskuje wartość przypisaną na bitach ?
wiem, że mój uint8_t niesie wartość 42.
P-138024
mateczek
możliwości kilka!
» 2015-09-30 11:32:38
Na początku klasa którą kiedyś napisałem dla wygody!!!

https://pl.wikibooks.org/wiki/Programowanie_C%2B%2B_Qt4_w_systemie_Gnu-Linux/QVariant

C/C++
class BitsArray
{
    WORD data; //składnik klasy
public:
   
    //poniżej konstruktor funkcja uruchamiana automatycznie przy tworzeniu obiektu
    //nie robi nic poza wpisaniem 0 do pola daty
    BitsArray( int _data = 0 ) { data = _data; }
   
    //poniżej funkcja która ustawi pole data; robi to samo co konstruktor tyle że numer już ma wartość zadaną
    void fromNumer( int numer ) { data = numer; }
   
   
   
    //najważniejsza funkcja przeładowany operator.
    //Zadaniem funkcji jest sprawdzenie stanu bita o zadanym numerze
    bool operator []( int bitNumer ) {
        return data & 1 << bitNumer;
       
        /* krok po kroku rozpiszę tą funkcję
            WORD maska=1<<bitNumer; // maska to zmienna, która ma jdynkę przesuniętą o liczbę pól określoną w zmiennej bitnumer.
            WORD temp = data&maska; //robimy AND zmienej data z maską. Wynikiem iloczynu pola data z maską jest 0 lub 1. W zależności od tego jaki jest stan ma bit w słowie data.
            return temp; // 0 to false 1 to true;
            */
    }
   
};
#endif // BITSARRAY_H

użycie klasy to
C/C++
#include "BitsArray.h"



int main()
{
    BitArray a( 42 );
    //  int b=45;
    //  a.fromNumer(b);
    bool bit = a[ 1 ];
    cout << bit << endl;
}

właściwie to robotę robi ta linijka
C/C++
int data = 42;
bool bit = data & 1 << bitNumer; // "data" to numer, a "bitNumer" to numer bitu którego wartość sprawdzamy;

inne rozwiązanie to skorzystanie z klasy std::bitset;

C/C++
bitSet < 16 > b( 42 );
cout << b[ numerBitu ] << endl;

Jeśli interesuje cię informacja zakodowana na kilku bitach. To najpierw maskę robisz a potem &.

Załóżmy, iż chcę uzyskać bity w nawiasie  0001000[001]111011
C/C++
ushort maska = 7 << 6; // maska to zmienna, która ma 7(111) przesuniętą o 6 pól. inaczej wartość 448
//ushort maska=448;
ushort temp = data & maska;
P-138025
Anim
Temat założony przez niniejszego użytkownika
» 2015-09-30 12:22:56
Dzięĸuje :) wystarczy w zupełności :)
P-138026
« 1 »
  Strona 1 z 1