You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DuckDB C++ API读取duckdb::Value::BLOB的数据与大小?

从DuckDB C++ API的BLOB类型Value中提取数据

要从duckdb::Value的BLOB实例中获取数据和大小,直接使用DuckDB C++ API提供的GetData()和GetSize()方法即可,步骤如下:

  1. 类型检查(可选但推荐):先确认当前Value确实是BLOB类型,避免类型不匹配导致的错误
  2. 获取大小:调用GetSize()得到BLOB的字节长度
  3. 获取数据指针:调用GetData()获取底层数据的const指针,再转换为const char*以匹配std::vector<char>的类型
  4. 填充vector:用数据指针和大小初始化或填充std::vector<char>

示例代码

// 假设blob_value是已获取到的duckdb::Value(BLOB类型)
if (blob_value.type().id() == duckdb::LogicalTypeId::BLOB) {
    // 获取BLOB的字节大小
    size_t blob_size = blob_value.GetSize();
    // 获取数据指针,转换为const char*
    const char* blob_data = reinterpret_cast<const char*>(blob_value.GetData());
    
    // 将数据填充到std::vector<char>
    std::vector<char> binary_data(blob_data, blob_data + blob_size);
}

补充说明

  • duckdb::const_data_ptr_t本质是const uint8_t*,因此需要通过reinterpret_cast转换为const char*才能直接用于初始化std::vector<char>
  • 如果不需要显式的类型检查,也可以直接调用方法,但建议保留检查以提升代码健壮性
  • 也可以用duckdb::string_view临时包装数据,再转换为vector:
    duckdb::string_view blob_view(
        reinterpret_cast<const char*>(blob_value.GetData()),
        blob_value.GetSize()
    );
    std::vector<char> binary_data(blob_view.begin(), blob_view.end());
    

内容的提问来源于stack exchange,提问作者nostep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:33:42