Problema con conversione dati

di il
8 risposte

Problema con conversione dati

Salve a tutti
avreste un idea su come poter convertire questa struttura

struct pdata
{
	short aa;
	short mm;
	short gg;
};
in un semplice intero.
a me l'unica idea che è venuta e quella delle moltiplicazioni e delle addizioni.
ma se c'è un sistema più rapito ed efficace sarebbe meglio.
rongrazio anticipatamente chiunque mi desse un idea.

8 Risposte

  • Re: Problema con conversione dati

    Puoi fare una union 16 bit anno 8 bit mese 8 bit giorno, così hai un int a 32 bit subito pronto per il confronto.
    I calcoli saranno solo nascosti lato C, però
  • Re: Problema con conversione dati

    Grazie per la risposta
    se ho capito bene devo costruirmi l'int 32 usando gli shift?
  • Re: Problema con conversione dati

    La union memorizza un solo campo per volta e ha come grandezza quella del tipo più grande. Nel caso di sopra avrebbe le dimensioni di uno short.
  • Re: Problema con conversione dati

    Ti bastano un paio di shift
    
    	pdata data = { 2022, 08, 18 };
    	int nuovadata = (data.aa << 16) + (data.mm << 8) + data.gg;
    
  • Re: Problema con conversione dati

    Intendevo questo
    
    #include <stdio.h>
    #include <inttypes.h>
    
    typedef union {
      uint32_t i;
      struct {
        uint8_t  gg;
        uint8_t  mm;    
        uint16_t aa;    
      } s; 
    } data;
    
    int main(){
        data d1 = {.s = {11, 3, 2022}},
             d2 = {.s = {10, 3, 2022}};
        
        if(d1.i < d2.i)
            printf("d1 precede d2");
        else if(d1.i > d2.i)
            printf("d2 precede d1");   
        else
            printf("d1 e d2 sono uguali");        
    
        return 0;
    }
    
    Poi all'atto pratico verranno fatti gli stessi shift che fa oregon
  • Re: Problema con conversione dati

    Quasi.

    Lui parte da una struct diversa, tu gliela cambi. E non so se lui possa farlo o no.

    Gli shift funzionano sulla struct indicata dall'OP.

    Se la struct può essere cambiata, è sicuramente meglio ma lo deve dire l'OP.
  • Re: Problema con conversione dati

    Grazie a tutti per le risposte
    comunque ho risolto nella seguente maniera
    
    struct pdata
    {
    	short aa;
    	short mm;
    	short gg;
    };
    extern "C" int __stdcall PdatatoInt(struct pdata& jolly)
    {
    	int indy, kindy;
    	indy = 10000 * jolly.aa;
    	kindy = 100 * jolly.mm;
    	return indy + kindy + jolly.gg;
    }
  • Re: Problema con conversione dati

    Guarda che gli shirt sono più veloci delle moltiplicazioni
Devi accedere o registrarti per scrivere nel forum
8 risposte