对C中的字符指针进行类型转换

时间:2010-09-15 21:12:14

标签: c embedded casting

我有一个函数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 个答案:

答案 0 :(得分:7)

你可以这样做:

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

但是这样做的首选方法是定义函数以获取一个void指针,如:

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

然后编译器不应该警告你传递的任何指针类型。