c - 如何为每个函数调用或宏构建一个具有一个字段的结构?
问题描述
我想通过套接字发送一个结构。我不想使用 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 留作练习。
推荐阅读
- node.js - 在 Puppeteer 中单击具有特定文本的内部元素的外部元素
- sql - 如何覆盖此代码以便正确插入数据?
- angular - 动态调用管道转换时,ng-select 不更新选项
- java - 为什么我们不应该对 double 变量使用 int 值?(OCA 考试)
- javascript - 如何迭代整个数组?然后更新数据库
- java - Netbeans IDE 11 无法访问 java.lang 致命错误:无法在类路径或引导类路径中找到包 java.lang
- apache2 - LAMP 上的 serviceWorker 不存在
- reactjs - 检查材料表行是否仍处于编辑模式
- bluetooth-lowenergy - 在 Segger Embedded Studio 上使用带有 nrf52832 芯片的 nRF52 DK 进行广告和连接建立
- scala - .rowsBetween(Window.unboundedPreceding,Window.unboundedFollowing)错误火花斯卡拉