Ich habe ein Float-Array in C#, die Daten speichert. Allerdings muss ich die Daten in Strukturen wie Vector2, Vector3 usw. umwandeln. Die Strukturen enthalten nur Gleitkommazahlen, daher gibt es keine Datentypkonvertierung in Bezug auf Bytes, nur im Zugriff.C# Cast Float-Array zu Struktur von Floats
Eg .:
struct Vector3
{
public float x;
public float y;
public float z;
//plus some methods
}
ich das ganze float-Array auf die Struktur eines manuell durch Erstellen eines neuen Arrays kopieren können, aber das ist etwas langsam für große. Ich habe versucht, Konvertierung in unsicheren Code zu tun, aber die Verwendung von generischen funktioniert nicht und das Erstellen spezieller Methode für jede Struktur, die ich habe, ist irgendwie "komisch".
In C++ Ich habe so etwas wie dies:
float * arrayFloat = ....
Vector3 * arrayVector3 = reinterpret_cast<Vector3 *>(arrayFloat);
aber das ist keine Option in C# ...
Irgendwelche Ideen, wie dies zu erreichen, oder wie man das Design ändern?
* "In C++ habe ich etwas wie das:" * Nein, Sie nicht, dies verletzt strenge Aliasing. (Auch Padding, und was auch immer zusätzliche Aromen von UB Sie treffen können.) –
Ich habe C++ - Struktur mit Padding-Ausrichtung und es sollte "Safe" unter MSVC Compiler –
Warum nicht speichern das Array in der 'Vector2',' Vector3',. .. Klasse statt drei 'doppelte' Werte? Dann müssten Sie nur das interne Array von 'Vector3' auf das gegebene Array setzen und es würde kein Kopieren mehr stattfinden. – Kjara