我有一个函数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);
答案 0 :(得分:7)
你可以这样做:
EE_Write(0,sizeof(myword),(uint8_t *)&myword);
但是这样做的首选方法是定义函数以获取一个void指针,如:
uint8_t EE_Write(uint8_t addr, uint8_t len, const void * buf);
然后编译器不应该警告你传递的任何指针类型。