' schrieb:Vielleicht ist es einfacher so zu erklären (zumindest für C++ler o. ä.):
Flatten To String ist wie Type Cast von Irgendwas auf Stringtyp
Unflatten From String ist wie Type Cast von String auf Irgendwastyp
Ein Unterschied gibt es, man kann bei diesen VIs noch den Byte Order angeben.
Nein ein Typecast ist leider etwas anderes! Ein Typecast verändert den Datentyp einer Variablen ohne die Representation im Speicher zu veränderen. LabVIEW hat auch einen Typecast und der lässt sich nur auf flache Daten (d.h. Skalars und Arrays of Skalars, wobei auch ein String ein Array of Skalar ist) anwenden. In C kann man grundsätzlich auch eine Struktur (LabVIEW Equivalent zu einem Cluster) Typecasten aber wenn diese Pointers enthält bekommt man nach einem Typecast nicht den Inhalt dieser Pointer sondern nur 4 Bytes die dem Pointer selber entsprechen.
Ein Flatten geht die ganze Datenstruktur durch und kopiert alle darin enthaltenen Daten in einen zusammenhängenden Speicherbereich. Für Skalars und Array of Skalars ist das grundsätzlich equivalent zu einem Typecast aber sobald man darin einen Cluster hat der Arrays und Strings enthält werden diese mit in den flattened Datenstrom hineinkopiert, so nötig auch rekursiv.
Unflatten macht die ganze Operation von Flatten wieder rückgängig.
Warum ein flattened Datenstrom als String representiert wird? Ganz einfach: die FILE I/O, GPIB, VISA, TCP/IP usw. VIs haben (oder hatten zumindest) alle einen String Ein- und Ausgang weil man sie eben oft mit ASCII Kommandos verwendet aber grundsätzlich kann dieser String auch binäre Daten enthalten wenn der Empfänger auf der anderen Seite damit umgehen kann. Um nun solche Flattened Daten nicht jeweils noch durch ein String To Byte Array durchschleifen zu müssen (oder was man auch hätte machen können und im Nachhineine gesehen wohl logischer gewesen wäre) all diese Funktionen auch mit Byte Arrays kompatibel zu machen (polymorphe VIs bestehen aber erst seit Version 5.0 oder so), wurden sie halt als String ausgeführt.
Rolf Kalbermatter