如何使用每个函数调用或宏一个字段构建一个结构?

时间:2019-03-28 09:42:50

标签: c struct

我想通过套接字发送结构。我不想使用IDL来指定结构,但可以更动态地进行操作。我想在代码中添加几个函数调用或宏调用,例如SendInt32(someInteger)。该结构在代码中每个函数调用应包含一个字段。同一代码行(例如循环)的多次调用应更新同一字段。如何动态构建此结构?

还需要计算字段长度的总和。让我们忽略远程端点当前如何读取结构。

SendInt32(1);    // (1)
SendInt16(2);    // (2)
for (int i = 0; i < 10; i++) 
{
  SendInt32(i);  // (3)
}

Send函数的实现应产生如下结构:

struct {
  uint16_t size = 10;  // sizeof(first) + sizeof(second) + sizeof(third)
  int32_t first = 1;   // (1)
  int16_t second = 2;  // (2)
  int32_t third = 9;   // (3)
}

在C语言中有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以将数据存储在字节缓冲区中,例如:

size_t packet_size = 0;

unsigned char buf[1024];

void AccumulateInt32(int32_t n)
{
  memcpy(buf + packet_size, &n, sizeof n);
  packet_size += sizeof n;
}

然后您可以使用packet_sizebuf[]进行发送。

练习时留有字节序,错误检查和更好的API。