INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Datenempfang - Konvertierung



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

29.04.2008, 08:53 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2008 17:51 von jg.)
Beitrag #1

Curtis Newton Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 132
Registriert seit: Apr 2008

8.5
2008
de

14***
Deutschland
Datenempfang - Konvertierung
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
Lv85_img


Angehängte Datei(en)
Sonstige .vi  rec.vi (Größe: 9 KB / Downloads: 182)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.04.2008, 09:10
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Datenempfang - Konvertierung
Die Typformung ist ein zusätzliches AddON für forteschrittene Benutzer und immer mit Vorsicht zu benutzen. Warum versuchst Du es nicht erst einmal mit den normalen String zu Zahl Konvertierungsfunktionen? (Unter String-Funktionen). Die sind viel leistungsfähiger, als man zunächst glaubt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2008, 09:18
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.303
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Datenempfang - Konvertierung
' 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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2008, 09:19
Beitrag #4

Curtis Newton Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 132
Registriert seit: Apr 2008

8.5
2008
de

14***
Deutschland
Datenempfang - Konvertierung
...weil ich z.B. auch mal 6504 senden will. Und das hat ja keine ASCII-Repräsentation. Sorry, mein Beispiel war dahingehend wohl verwirrend. Aber so läßt sich wenigstens schauen, ob die Daten richtig gesendet und empfangen wurden.

Curtis
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2008, 09:29 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2008 17:52 von jg.)
Beitrag #5

Curtis Newton Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 132
Registriert seit: Apr 2008

8.5
2008
de

14***
Deutschland
Datenempfang - Konvertierung
' schrieb: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

Hallo,

irgendwie stelle ich mich zu doof an. Anbei mal mein Versuch. Hmmm? Anstelle von 't' (=116) erhalte ich 7602176.

Curtis
Lv85_img


Angehängte Datei(en)
Sonstige .vi  rec.vi (Größe: 9,38 KB / Downloads: 176)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2008, 09:37 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2008 09:38 von rolfk.)
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.303
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Datenempfang - Konvertierung
' schrieb:Hallo,

irgendwie stelle ich mich zu doof an. Anbei mal mein Versuch. Hmmm? Anstelle von 't' (=116) erhalte ich 7602176.

Curtis

Natürlich! Hast ja ein int32 und der hat 4 Bytes!

Sagte ja Swap Bytes UND Swap Words. Das Erste swapped die Bytes innerhalb eines Words, also

1 2 3 4 -> 2 1 4 3

und das Zweite swapped die Words selber, also

2 1 4 3 -> 4 3 2 1

Capiche? Wink-2

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2008, 09:40
Beitrag #7

Curtis Newton Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 132
Registriert seit: Apr 2008

8.5
2008
de

14***
Deutschland
Datenempfang - Konvertierung
' schrieb:Natürlich! Hast ja ein int32 und der hat 4 Bytes!

Sagte ja Swap Bytes UND Swap Words. Das Erste swapped die Bytes innerhalb eines Words, also

1 2 3 4 -> 2 1 4 3

und das Zweite swapped die Words selber, also

2 1 4 3 -> 4 3 2 1

Capiche? Wink-2

Rolf Kalbermatter

Capiche! Danke!

Guru1

Curtis
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler bei Konvertierung von Word zu PDF TDO88 12 3.692 04.07.2023 12:25
Letzter Beitrag: TDO88
  VI Konvertierung psypher 1 3.191 05.09.2016 09:52
Letzter Beitrag: jg
  Konvertierung der Datentypen gpn89 4 5.709 11.04.2014 07:43
Letzter Beitrag: GerdW
  Bitte um Konvertierung LV2011 auf 8.6 HH99 4 4.181 01.04.2014 12:11
Letzter Beitrag: HH99
Question Konvertierung U8<->I16 EVikVik 2 4.300 27.09.2013 10:40
Letzter Beitrag: EVikVik
  LabView v10.0 -> v6.1 Konvertierung MHS-Elektronik 6 6.007 14.08.2011 16:24
Letzter Beitrag: MHS-Elektronik

Gehe zu: