当前位置: 首页 > news >正文

模拟curl的回调函数实现返回结构体

#include <iostream>
#include <vector>

// 自定义数据结构
struct MyData {
    int value1;
    int value2;
};

// 回调函数
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid) {
    std::vector<MyData>* dataVector = static_cast<std::vector<MyData>*>(lpVoid);
    if (dataVector == nullptr || buffer == nullptr) {
        return -1;
    }

    // 计算接收到的 MyData 结构体的数量
    size_t numStructs = size * nmemb / sizeof(MyData);
    MyData* dataPtr = static_cast<MyData*>(buffer);

    // 将接收到的 MyData 结构体添加到向量中
    for (size_t i = 0; i < numStructs; ++i) {
        dataVector->push_back(dataPtr[i]);
    }

    return nmemb;
}

int main() {
    // 模拟接收自定义数据结构数组
    MyData dataArray[] = {{1, 2}, {3, 4}, {5, 6}};
    size_t size = sizeof(MyData); // 每个数据单元大小为 sizeof(MyData)
    size_t nmemb = sizeof(dataArray) / sizeof(dataArray[0]);

    std::vector<MyData> receivedData;
    OnWriteData(dataArray, size, nmemb, &receivedData);

    // 输出接收到的数据
    for (const auto& data : receivedData) {
        std::cout << "Value1: " << data.value1 << ", Value2: " << data.value2 << std::endl;
    }

    return 0;
}
  • 把 lpVoid 转换为 std::vector<MyData>* 类型的指针,这样就能将接收到的 MyData 结构体存储到向量中。
  • 计算接收到的 MyData 结构体的数量,通过 size * nmemb / sizeof(MyData) 来实现。
  • 把接收到的 MyData 结构体逐个添加到向量中。

在main函数调用中,

  • 模拟了一个 MyData 结构体数组 dataArray
  • 调用 OnWriteData 函数来处理数据。
  • 输出接收到的 MyData 结构体的成员值。
http://www.dtcms.com/a/92163.html

相关文章:

  • 基于Spring Boot的ONLY在线商城系统设计与实现的设计与实现(LW+源码+讲解)
  • Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3
  • Headless Chrome 优化:减少内存占用与提速技巧
  • c++随记
  • 糖尿病大模型预测及临床应用研究智能管理系统技术文档
  • 线段树SegmentTree
  • HTML5 Audio(音频)学习笔记
  • Elasticsearch客户端工具初探--kibana
  • PyTorch处理数据--Dataset和DataLoader
  • Springboot高版本适配人大金仓
  • qtcore在docker容器中运行
  • string 的接口
  • 有额外限制的 bellman_ford 算法
  • Docker技术全景解析
  • 串行通信 与 并行通信 对比
  • 3、实际常用命令【待补充】
  • rocketmq零拷贝技术底层实现
  • PgDog:一个PostgreSQL分布式集群中间件
  • 【前端常用函数】
  • 达梦改密码时不想看到明文
  • 下载vmware17
  • SQL-木马植入、报错注入及其他
  • 【算法day22】两数相除——给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。
  • C++ 与 C 语言中的链表初始化方式对比(数据结构)
  • 【Linux】环境搭建 - 使用Mac电脑连接树莓派
  • [Leetcode]单链表回顾
  • Linux系统中-cp命令/mv命令/rename命令/rm命令
  • JavaScript基础-BOM 概述
  • Rust vs. Go: 性能测试(2025)
  • 多态的原理