c - 帮助将指针强制转换为 union

标签 c pointers casting unions

我正在研究 C 固件项目。我有一个 union ,定义为,

typedef union {
    unsigned long value;
    unsigned char bytes[4];
} LONGVALUE;

我还有一个具有此原型(prototype)的函数,

char sendHexToASCII_UART(char *msg, int cnt);

以及 LONGVALUE 类型的变量定义为,

LONGVALUE countAddr;

问题: 我用数组 (tempBuff1) 中的值填充 union 变量的各个字节,然后我想将 union 中第一个元素的地址传递给一个函数,该函数将其打印到 UART。在我的函数调用 sendHexToASCII_UART((int *)countAddr.bytes[0], 4); 上,我收到一条编译器警告,提示“从不同大小的整数转换为指针”。有人可以解释一下为什么我会出现这种情况以及如何让它消失吗?注意:将 (int *) 转换更改为 (char *) 会导致相同的警告。

countAddr.bytes[0] = tempBuff1[COUNT_ADDR - PWRD_ADDRESS];
countAddr.bytes[1] = tempBuff1[COUNT_ADDR - PWRD_ADDRESS + 1];
countAddr.bytes[2] = tempBuff1[COUNT_ADDR - PWRD_ADDRESS + 2];
countAddr.bytes[3] = tempBuff1[COUNT_ADDR - PWRD_ADDRESS + 3];
sendHexToASCII_UART((int *)countAddr.bytes[0], 4); 

最佳答案

为什么不只是:

sendHexToASCII_UART((char *)countAddr.bytes, 4);

或者更好:

sendHexToASCII_UART((char *)countAddr.bytes, sizeof(countAddr.bytes));

关于c - 帮助将指针强制转换为 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871854/

相关文章:

c - SQLite 错误 :undefined swmbol:pthread_mutex_lock

c - void *的双指针和单指针?

c - 结构元素无法分配这个问题,但我无法得到适当的结果?

java - 如何将子类转换为父类(super class)[无法转换]?

RAW套接字可以绑定(bind)到ip :port instead of an interface?吗

c - 达到循环的第二次迭代后出现段错误

c - 将内存分配给指向结构的指针

JavaScript If/Else 条件和比较 - 差异

C++ - 使用地址解释转换 const

c++ - 错误 C2196 : case value '?' already used