' schrieb:Hallo,
ich sende per sockets (in C++) ein int:
int sz='z';
bytesSent = send( m_socket, (char*)(&sz), 4, 0 );
Nun will ich den mit LabVIEW empfangen. Das klappt auch. Wenn ich ein 'z' sende, wird mit das auch als 'z' angezeigt. Nur kann ich leider die gelesenen Daten mittels Typenformung nicht in eine Zahl umwandeln. Anbei mein Versuch (LabVIEW 8.5). Was mache ich denn falsch?
Danke - Curtis
Ganz einfach! Du übersiehst die Endianess. Das ist die Reihenfolge der Bytes in einem Bytestream. Intel CPUs möchten das gerne in Little Endian (LSB first). C Programme die für Intel-Plattformen geschrieben sind gehen ohne besondere Vorkehrungen im allgemeine von dieser Bytereihenfolge aus.
LabVIEW bevorzugt aber Big Endian (MSB first) und dasselbe gilt im Prinzip für viele TCP/IP Protokolle die oft Network Byte Order vorschreiben, was wiederum dasselbe ist wie Big Endian.
Vor LabVIEW 8.0 war Big Endian das einzige Format das LabVIEW für Typecast und Flatten To/Unflatten From String unterstützte. Seit LabVIEW 8 unterstützen die Flatten und Unflatten Nodes einen Parameter mit dem man die Endianess des binären Datenstromes vorgeben kann.
Aber auch vor LabVIEW 8, genau so wie für Dein Beispiel mit Typecast, kann man sich in LabVIEW gut behelfen indem man die Swap Words und Swap Bytes Nodes in die numerischen Wires einfügt.
Rolf Kalbermatter