我想通过套接字发送一个结构。我不想使用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 语言中可能吗?
最佳答案
您可以将数据累积在字节缓冲区中,例如:
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_size
和 buf[]
并实际发送。
字节顺序、错误检查和更好的 API 留作练习。
关于c - 如何构建每个函数调用或宏只有一个字段的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394415/