我有一个字符缓冲区,定义为char *buffer
。当我发送XBEE数据包数据时,有一个固定的大小要求(84字节)。我的问题是我不知道如何迭代将缓冲区转换为84字节块。这是我得到的:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
packet = (buffer + i);
^
我的代码:
int sendSerialBuffer(char *buffer, int length)
{
int i = 0;
int result = 0;
char (* packet)[84];
// Iterate through all the bytes in the buffer
for (i = 0; i < length; i = i + 84)
{
packet = (buffer + i);
result = sendPacket(packet)
}
return 0;
}
修改:
我也试过声明像char packet[84];
这样的数据包并获取:
error: assignment to expression with array type
packet = (buffer + i);
^
此外,sendPacket定义为:sendPacket(char packet[84]);
答案 0 :(得分:2)
int i = 0;
int result = 0;
// Iterate through all the bytes in the buffer
for (i = 0; i < length; i = i + 84)
{
char packet[84];
memcpy(packet, buffer[i],84);
result = sendPacket(packet);
}
return 0;
请注意,这不涉及缓冲区不是84的完全倍数的情况
如果sendPAcket期望char *
而不是char [84]
,那么生活会更容易。然后代码将读取
int i = 0;
int result = 0;
// Iterate through all the bytes in the buffer
for (i = 0; i < length; i = i + 84)
{
char packet[84];
memcpy(packet, buffer[i],84);
result = sendPacket(buffer[i]);
}
return 0;
答案 1 :(得分:1)
这不起作用:
packet = (buffer + i);
因为类型不一样。 packet
的类型为char (*)[84]
(即指向84 char
数组的指针),而buffer
的类型为char *
。实际上你不需要这种额外的类型。
鉴于sendPacket
定义为:
int sendPacket(char packet[84])
参数packet
实际上具有类型char *
,因为数组作为函数参数衰减成为指向第一个元素的指针。
然后您可以按如下方式调用此函数:
result = sendPacket(buffer + i)
表达式buffer + i
计算缓冲区中元素i
的地址。假设sendPacket
从该地址读取84个字节,它将获取缓冲区中的下一个84字节。