我有一个函数uint8_t EE_Write(uint8_t addr, uint8_t len, uint8_t * buf)
,它接受一个指向它将写入内存的一些数据的指针,以及一个uint16_t myword
,我想给它。基本
EE_Write(0,sizeof(myword),&myword);
给我编译器警告“Indirection to different types ('unsigned int *const ' instead of 'unsigned char *const ')” 即使我将单词 (int) 类型转换为字节 (char),我也收到了确切的信息同样的警告(没有多少带括号的分组有帮助)。
EE_Write(0,sizeof(myword),&(uint8_t)myword);
警告随着 union 消失,但为了让编译器满意而不得不将它写入另一个变量是愚蠢的。
union catbyte {
uint16_t w;
uint8_t b[2];
};
union catbyte mybytes;
mybytes.w = myword;
EE_Write(0,sizeof(myword),mybytes.b);
最佳答案
你可以这样做:
EE_Write(0,sizeof(myword),(uint8_t *)&myword);
但是这样做的首选方法是将函数定义为采用 void 指针,例如:
uint8_t EE_Write(uint8_t addr, uint8_t len, const void * buf);
然后,对于您传递的任何指针类型,编译器都不应该警告您。
关于c - 将整数类型转换为 C 中的字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721836/