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.