2010-09-15 16 views
0

J'ai une fonction uint8_t EE_Write(uint8_t addr, uint8_t len, uint8_t * buf) qui prend un pointeur à certaines données qu'il va écrire en mémoire, et un uint16_t myword que je veux lui donner. LeTypecasting un entier à un pointeur de caractère dans C

EE_Write(0,sizeof(myword),&myword); 

de base me donne l'avertissement du compilateur "Indirection à différents types ('unsigned int * const' au lieu de 'unsigned char * const')" Même quand je Typecast le mot (int) à un octet (char), J'ai reçu exactement le même avertissement (et aucun montant de regroupement avec des parenthèses aidé).

EE_Write(0,sizeof(myword),&(uint8_t)myword); 

Avertissements disparaissent avec un syndicat, mais il est stupide d'avoir à l'écrire à une autre variable juste pour le compilateur heureux.

union catbyte { 
    uint16_t w; 
    uint8_t b[2]; 
}; 

union catbyte mybytes; 

mybytes.w = myword; 
EE_Write(0,sizeof(myword),mybytes.b); 

Répondre

7

Vous pourriez faire:

EE_Write(0,sizeof(myword),(uint8_t *)&myword); 

Mais la façon preferred de le faire serait de définir la fonction de prendre un pointeur vide comme:

uint8_t EE_Write(uint8_t addr, uint8_t len, const void * buf); 

Et puis le compilateur shouldn Je ne vous préviens pas à ce sujet pour tout type de pointeur que vous passez.

+0

Ah, devrait regarder 'memcpy', etc. pour avoir un indice. –