c - 将整数类型转换为 C 中的字符指针

标签 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);

给我编译器警告“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/

相关文章:

C - 打印字符串中每个字符的 ASCII 值

java - Android:如何在 OnItemClickListener() 中调用 getActivity()?

c - 定点小数 printf 输出

casting - 在 F# 中将 DateTime 分配给 Nullable<DateTime>

c - C什么时候不需要address-of运算符?

无法理解 strtok 和 sscanf 的这种行为

c - 在 C 中使用系统调用编写填充十六进制

c++ - 目录结构 C++

embedded - 未知的 BlueNRG SPI 响应

c - 微 Controller 的sprintf和printf有什么区别