Wie man float in Byte?

Ich bin mit dem HIDAPI, um Daten zu senden, um ein USB-Gerät. Diese Daten können nur gesendet werden, als byte array und muss ich senden Sie ein paar float zahlen in das Daten-array. Ich weiß, schwimmt haben 4 bytes. Also dachte ich, das könnte funktionieren:

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;

Und später alles was ich zu tun hatte, war:

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

Aber testen das zeigt mir, dass die Zeilen wie data[0] = (int) f >> 24; gibt immer 0. Was ist Los mit meinem code und wie mache ich das richtig (D. H. das brechen eines float innere Daten in 4 char bytes und die Neuerstellung der gleichen float später)?


BEARBEITEN:

War ich in der Lage, dies zu erreichen mit den folgenden codes:

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

und

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

Ich weiß memcpy() ist ein "sauberer" Weg, es zu tun, aber auf diese Weise ich denke, die performance ist etwas besser.

  • Der Grund (int)f >> 24 zurück 0 ist, dass die int gegossen f gleich 0 in den ersten Platz: der cast sendet die Schwimmer auf Ihrem Boden. Es ist Undefiniertes Verhalten, aber es zu tun, dass hacky so, als würden Sie etwas brauchen, wie *(int*)&f >> 24.
InformationsquelleAutor mFeinstein | 2014-01-08
Schreibe einen Kommentar