Funktion und Argument als anderer Datentyp



  • die funktion erwartet ein long unsigned int array und ich will ihr ein unsigned short array übergeben



  • alfredo78 schrieb:

    die funktion erwartet ein long unsigned int array und ich will ihr ein unsigned short array übergeben

    dann trifft das zu, was Bashar geschrieben hat. mit 'nem cast alleine wird das nix.
    🙂



  • ja ich zweifel auch an ob es überhaupt möglich ist 😕

    aber wollt halt mal nachfragen 🙂



  • alfredo78 schrieb:

    ja ich zweifel auch an ob es überhaupt möglich ist 😕

    geht ja auch. ein (temporäres) 'unsigned long'-array anlegen, alles rüberkopieren und dann die funktion aufrufen. ich weiss, das ist nicht sehr elegant. besser du arbeitest von vorn herein mit einem 'unsigned long' array, wenn du vorhast diese funktion aufzurufen.
    🙂



  • #define ANZ 1000
        int i;
        unsigned short a[ANZ];
        unsigned long  b[ANZ];
    
        for (i = 0; i < ANZ; i++)
        {
            b[i] = (unsigned long)a[i]; // casten und kopieren! 
        }
    

    🕶



  • hm ja nur ist ein einfaches kopieren in diesem fall schwer.

    ._. schrieb:

    #define ANZ 1000
        int i;
        unsigned short a[ANZ];
        unsigned long  b[ANZ];
    
        for (i = 0; i < ANZ; i++)
        {
            b[i] = (unsigned long)a[i]; // casten und kopieren! 
        }
    

    🕶

    denn mein problem ist das ich am nach dem funktions aufruf von long auf short casten muss und dabei eben daten verloren gehen ...

    was mir noch einfällt unzwar:

    long unsigned int wird bei der funktion per typedef definiert, also z.b.

    typedef long unsigned int lui;
    

    jetzt habe ich einfach mal probiert das bei mir im programm neu auf unsigned short zu definieren also

    typedef unsigned short lui;
    

    naja aber compiler mekkert 😞

    kann man vielleicht dort ansetzt???



  • alfredo78 schrieb:

    er mekkert zwar nicht aber funktionieren tut das auch nicht 😞

    du musst natürlich deine funktion auch neu compilieren, nachdem das typedef geändert wurde. eine andere, aber eher seltene, möglichkeit: wenn du deinem compiler sagen kannst, wie breit ein 'short' sein soll, dann mach 'short' genau so breit wie 'long'.
    🙂



  • faule-tricks-fan schrieb:

    alfredo78 schrieb:

    er mekkert zwar nicht aber funktionieren tut das auch nicht 😞

    du musst natürlich deine funktion auch neu compilieren, nachdem das typedef geändert wurde. eine andere, aber eher seltene, möglichkeit: wenn du deinem compiler sagen kannst, wie breit ein 'short' sein soll, dann mach 'short' genau so breit wie 'long'.
    🙂

    hm recht hast :p hm dem compiler sagen wie breit ein short/long ist wie geht das? hab den normalen gcc unter cygwin



  • alfredo78 schrieb:

    dem compiler sagen wie breit ein short/long ist wie geht das? hab den normalen gcc unter cygwin

    ich weiss nicht, ob's mit dem gcc geht. es gibt da gewisse festlegungen im c-standard wie z.b. int8_t <= char <= int16_t <= short <= int <= long, d.h. theoretisch dürfen alle gleich gross sein. wenn nicht, dann änder doch das typedef und übersetz die lib neu. wieso willst du überhaupt mit einem 'unsigned short' array arbeiten? hast du andere funktionen, die einen solchen arraytyp erwarten?
    🙂



  • alfredo78 schrieb:

    denn mein problem ist das ich am nach dem funktions aufruf von long auf short casten muss und dabei eben daten verloren gehen ...

    Wieso arbeitest du denn dann überhaupt mit short, wenn du damit die Ergebnisse gar nicht festhalten kannst?


Anmelden zum Antworten