Ich schreibe ein C-Programm, das über Modbus TCP kommuniziert. Ich sende den Float 3.14
auf meinem Modbus-Client, mit einer hexadezimalen Darstellung von 0x4048F5C3
. Mein C-Code empfängt das Modbus-Paket korrekt und jetzt muss ich nur die unsigned char *buffer
als Float neu interpretieren, damit ich den Wert 3.14
erhalten kann. Hier ist mein CodeKann ich bei der Neuinterpretation als Float Endianess angeben?
int main()
{
setup_modbus_tcp();
unsigned char buffer[4] = { 0x00, 0x00, 0x00, 0x00 };
get_modbus_data(buffer, 4);
//Buffer now holds { 0x40, 0x48, 0xF5, 0xC3 };
float value = *(float *)buffer;
//value is now -490.564453
}
Jetzt kann ich sagen, dass dieses Problem wegen endianness ist, denn wenn ich endianness tauschen, so dass die Puffer wie folgt aussehen:
{ 0xC3, 0xF5, 0x48, 0x40 };
dann funktioniert alles einwandfrei. Aber das fühlt sich ein bisschen chaotisch an. Muss ich die Endianz tauschen? Oder gibt es einen Weg, dass ich Endianness angeben kann, wenn ich das tue:
Entweder Sie alle Bytes tauschen müssen oder Sie den Schwimmer als gedruckte ASCII-String senden. –
Auch nach Byte-Swapping: Sind Sie sicher, dass die Darstellung identisch ist? – Olaf
@Olaf Ja, nach dem Byte-Swapping ist es definitiv richtig. Es gibt einen kleinen Unterschied wegen der Fließkomma-Genauigkeit, aber ansonsten ist es richtig. – DJMcMayhem