C语言 结构指针转换为 uint8_t * 引发错误



在我的函数中,我为分配内存并填充一个名为messagePacket的结构

struct messagePacket *packet = malloc(sizeof(struct messagePacket));
//fill

当我尝试将指针转换为 (uint8_t *) 时,gcc 会抛出一条警告,指出:大整数隐式截断为无符号类型

sendBuf(..., (uint8_t *)packet);

我已经能够很好地完成以下操作,并且我知道我可以使用此方法作为解决方法。我在这里是因为我宁愿从中学习而不是解决它。

uint8_t *buf = malloc(sizeof(struct messagePacket));

结构消息包的大小 = 1209 B。我最好的猜测是内存块非常大,我存储在高内存地址中,例如 16 bye 地址?但这不符合我可以 malloc 相同大小的 uint8_t * 的事实。

我猜编译器注意到你的结构大于 8 位,使用 uint8_t 你只会处理结构的第一个字节。由于这似乎是有意的,因此您可以投射到(void *),然后投射到(uint8_t *)。但是你应该告诉sendBuf缓冲区大小是sizeof(struct messagePacket)

我认为警告是关于其他一些论点的。请提供该行的完整代码、sendBuf()函数的原型以及相关行的完整编译器警告。

作为一般想法,sendBuf()函数可能应该使用const void *而不是const uint8_t *来发送数据。见send()和朋友。

相关内容

  • 没有找到相关文章

最新更新