Jak uzyskać bajty float?

Używam HIDAPI do wysyłania niektórych danych do urządzenia USB. Te dane mogą być wysyłane tylko jako tablica bajtów i muszę wysłać niektóre liczby zmiennoprzecinkowe wewnątrz tej tablicy danych. Wiem, że pływaki mają 4 bajty, więc pomyślałem, że to może zadziałać:

float f = 0.6;
char data[4];

data[0] = (int) f >> 24;
data[1] = (int) f >> 16;
data[2] = (int) f >> 8;
data[3] = (int) f;

A potem wszystko, co musiałem zrobić, to:

g = (float)((data[0] << 24) | (data[1] << 16) | (data[2] << 8) | (data[3]) );

Ale testowanie tego pokazuje mi, że takie liniedata[0] = (int) f >> 24; wraca zawsze0. Co jest nie tak z moim kodem i jak mogę to zrobić poprawnie (tj. Złamać dane wewnętrzne float w 4 bajtach i odbudować ten sam float później)?

EDYTOWAĆ:

Udało mi się to osiągnąć dzięki następującym kodom:

float f = 0.1;
unsigned char *pc;
pc = (unsigned char*)&f;

// 0.6 in float
pc[0] = 0x9A;
pc[1] = 0x99;
pc[2] = 0x19;
pc[3] = 0x3F;

std::cout << f << std::endl; // will print 0.6

i

*(unsigned int*)&f = (0x3F << 24) | (0x19 << 16) | (0x99 << 8) | (0x9A << 0);

Wiem, że memcpy () jest „czystszym” sposobem na zrobienie tego, ale w ten sposób myślę, że wydajność jest nieco lepsza.

questionAnswers(6)

yourAnswerToTheQuestion