Ich stieß auf zwei Lösungen zum Lesen der Float-Wert eines BLE-Sensors. Die Memcpy-Methode ist einfach und macht Sinn, aber die andere Methode, auf die ich gestoßen bin, ist für mich nicht klar. Kann jemand genau erklären, wie die Zeiger-Casting-Methode funktioniert?Memcpy vs Pointer Cast zum Lesen BLE Sensor Float
// Represents data read from BLE device. Float value of 1.5
uint32_t data = 0x3fc00000;
float sensorValue;
// Memcpy method, makes sense and is straightforward
memcpy(&sensorValue, &data, sizeof(sensorValue));
// Works, but don't fully understand exactly how
sensorValue = *(float *)&data;
Beide rufen undefiniertes Verhalten auf. – Olaf
@Olaf Pflege um zu erarbeiten? Was wäre der richtige Weg, um den Float-Wert zu erhalten? –
http://port70.net/~nsz/c/c11/n1570.html#6.5p6. Um genau zu sein, können Sie Funktionen der Standardbibliothek und normale Operatoren verwenden. Sie können auch die Math-Bibliothek überprüfen, wenn Neuinterpretationsfunktionen vorhanden sind. Ich bin mir bewusst, dass dies ein Dilemma ist. Aber beachten Sie, dass Sie nicht einmal angeben, ob das Float-Format auf Ihrer Plattform und vom Sensor identisch ist. Ganz zu schweigen von Ausrichtung und Endlichkeit. – Olaf