Convert unsigned long* to int*
-
Schönen guten Abend.
Ich hätte nochmal eine Frage.
Ich muss 2 Bibliotheken miteinander verbinden und muss einer Funktion daraus einen Zeiger auf einen Array in Form eines int* übergeben. Die andere Bibliothek stellt diesen Array aber als long unsigned int* bereit. Das passt natürlich auf grund verschiedener Größe der Elemente des Array nicht zusammen. Ich muss also irgendenen Weg finden das in int* umzuwandeln, wenn möglich ohne den kompletten Array elementweise zu kopieren und dabei umzuwandeln.Ich habe mal ein kleines Testprogramm geschrieben:
#include <iostream> void print(int* iptr) { std::cout << "iptr[0] = " << iptr[0] << '\n'; std::cout << "iptr[1] = " << iptr[1] << '\n'; std::cout << "iptr[2] = " << iptr[2] << '\n'; } void print(double d){} int main() { long unsigned int lui[] = {5, 4, 3}; long unsigned int* ptr = lui; print((int*)ptr); }
In dieser Variante ist die Ausgabe:
iptr[0] = 5
iptr[1] = 0
iptr[2] = 4
Das ist klar weil long doppelt so groß wie int ist.
Ohne diese Konvertierung (int*)ptr kommt wie erwartet der Fehler, dass er keine Funktion mit diesem Argument findet.Hat jemand eine Lösung/Idee?
Also die print methode darf ich nicht verändern, den Datentyp von meiner Variable auch nicht.Vielen Dank und Grüße
-
Temporaeres Array anlegen und jede Zelle einzeln fuellen. Dabei Typkonvertierung durchfuehren mittels static_cast.
-
Wenn auf deinem System ulong und int unterschiedlich groß sind, ist das nicht möglich. Es sei denn, du hast eine Möglichkeit, der Zielfunktion zu sagen, dass sie jeden zweiten Wert überspringen soll. Da das nicht der Fall sein dürfte, bleibt dir außer umkopieren nicht viel übrig.
-
Die Bibliothek die das ganze benutzen soll wurde von jemand anderes in Fortran geschrieben. An den Code komm ich wie gesagt nicht ran.
Ok also sagt ihr auch, dass es ohne kopieren nicht anders geht?
Schönen Dank schonmal bis hierhin.Grüße