J'ai une API qui implémente une opération d'écriture dans EEPROM. Voici sa déclaration:Conversion entre uint8 et char en C
CYBLE_API_RESULT_T CyBle_StoreAppData (uint8 * srcBuff, const uint8 destAddr[], uint32 buffLen, uint8 isForceWrite);
Il fonctionne bien quand je l'appelle cette fonction et envoyer un paramètre de tableau à srcBuff
qui a été déclarée en tant que type uint8
.
Le problème est, j'ai besoin d'envoyer le pointeur de tableau char
. Je pensais que char
est déjà un uint8
, mais j'obtiens un avertissement de compilateur si j'envoie un pointeur de tableau char
à cette fonction au lieu de uint8
. Pourquoi ne puis-je pas utiliser char
au lieu de uint8
? Voici 2 exemples d'appel: cette fonction
static const uint8 datastack_ROM[dedicatedRomSize] = {0};
uint8 Container_ID[10];
char Prefix[10];
//Call the function with Container_ID which has been declared as uint8. This is working.
CyBle_StoreAppData(Container_ID,datastack_ROM,10,0);
//Call the function with Prefix which has been declared as char. This is NOT working.
CyBle_StoreAppData(Prefix,datastack_ROM,10,0);
Voici l'avertissement pour le second appel:
passing char[10] to parameter of type 'uint8 *' converts between pointers to integer types with different sign.
Ne sont pas char
et uint8
même?
La chose importante dans le message d'erreur est la partie sur "signe différent". Cela signifie que votre type 'char' est' signed' alors que 'uint8' est (supposé ici)' unsigned'. Cela ne va probablement pas être un gros problème, vous devriez juste pouvoir lancer votre pointeur: 'CyBle_StoreAppData ((uint8 *) Prefix, ...)' –
Cela semble être une violation de contrainte, attention: http: // stackoverflow.com/questions/30535814/passe-unsigned-char-pointeur-à-atoi-sans-cast –
@GiorgiMoniava J'ai regardé les questions similaires mais je suppose que je ne pouvais pas trouver ça. Comment puis-je mentionner qu'il y a une question similaire à cela? Ou suis-je celui qui a besoin de faire ça? –