Operacje na bitach - czy prawidłowo je wykonuje ?

0

Witam,

Odbieram z transmisji 2 rejestry 16 bitowe. Muszę dane, które odebrałem "złożyć" w jedną zmienną typu float.
Robię to tak:


// b_ zmienna typu byte
// f_ zmienna typu float

                   b_zm1 = _odebrane_dane[15];  // wartość 0
                   b_zm2 = _odebrane_dane[16];  // wartość 0 
                   b_zm3 = _odebrane_dane[17];  // wartość 66
                   b_zm4 = _odebrane_dane[18];  // wartość 92

                   f_all = i_zm1 << 24 | i_zm2 << 16 | i_zm3 << 8 | i_zm4;

 

Czy jest to prawidłowe rozwiązanie ?

0

Ja widzę, że składasz ładnego DWORD-a :), złóż do uint32 i casting na float

0

efekt ten sam.. a ten sposób jest zły ?

0

Jak działa to nie.

0

Moim zdaniem aktualne rozwiązanie jest nieczytelne trochę. Jak zamkniesz to w metodzie o dobrej nazwie to jeszcze może, ale mimo to robiłbym to rzutując a nie dokonując obliczeń.

0
Shalom napisał(a):

ale mimo to robiłbym to rzutując a nie dokonując obliczeń.

To jak byś to zrobił ?

0

@adam_c:

*((float*)(&b[15])) - rzutujesz pamięć z b na floata (kod w C, nie wiem jak będzie to wyglądało w C#).

0

Google mówi że C# ma klasę BitConverter -> float castedFloat = System.BitConverter.ToSingle(byteArray, startIndex);

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