Типизируя целое число на символьный указатель в C - PullRequest
0 голосов
/ 16 сентября 2010

У меня есть функция uint8_t EE_Write(uint8_t addr, uint8_t len, uint8_t * buf), которая принимает указатель на некоторые данные, которые он запишет в память, и uint16_t myword, который я хочу передать.Базовый

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

выдает мне предупреждение компилятора «Переадресация на разные типы (« unsigned int * const »вместо« unsigned char * const »)», даже если я приведу слово (int) к байту(char), я получил точно такое же предупреждение (и никакое количество группировок с круглыми скобками не помогло).

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

Предупреждения исчезают с объединением, но глупо писать его в другую переменную только для того, чтобыосчастливить компилятор.

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

union catbyte mybytes;

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

1 Ответ

7 голосов
/ 16 сентября 2010

Вы можете сделать:

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

Но предпочтительный способ сделать это - определить функцию для получения пустого указателя, например:

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

И тогда компилятор не долженне предупреждаю вас об этом для любого типа указателя, который вы передаете.

...