3

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

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

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

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

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

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

struct messagePacket 的大小 = 1209 B。我最好的猜测是内存块超级大,我存储在一个高内存地址中,例如 16 字节地址?但这不符合我可以 malloc 相同大小的 uint8_t * 的事实。

4

2 回答 2

2

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

于 2012-04-26T07:43:59.723 回答
0

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

一般来说,sendBuf()函数应该使用 aconst void *而不是 aconst uint8_t *来发送数据。见send()和朋友。

于 2012-04-26T07:38:56.013 回答