【问题标题】:HDF5 Store string attributes with different sizesHDF5 存储不同大小的字符串属性
【发布时间】:2016-08-02 06:54:57
【问题描述】:
  • 语言:c++
  • 包:HDF5,版本 1.6.8

我目前正在使用以下代码将真实数组存储为属性:

oid storeStringAttribute(H5::H5Location& group, string name, vector<double>& array)
{
    hsize_t dims[1];
    dims[0] = array.size();

    H5::DataSpace dataspace = H5::DataSpace(1, dims);
    H5::Attribute attribute = group.createAttribute(name.c_str(), NATIVE_DOUBLE, dataspace);
    attribute.write(H5::PredType::NATIVE_DOUBLE, vec.data());
}

我想写一个类似的代码来存储一个vector&lt;string&gt; 数组。 有没有一种简单的方法来存储可变大小的字符串数组?

我目前正在做的是使用更大的尺寸,但这不是很有效。

void storeStringAttribute(H5::H5Location& group, string name, vector<string>& array)
{
    hsize_t dims[1];
    dims[0] = array.size();

    size_t maxStringSize = 0;
    for(size_t i=0; i<array.size(); i++)
    { maxStringSize = std::max(maxStringSize, array.size()); }

    H5::StrType strdatatype(H5::PredType::C_S1, maxStringSize+1);

    H5::DataSpace dataspace = H5::DataSpace(1, dims);
    H5::Attribute attribute = group.createAttribute(name.c_str(), strdatatype, dataspace);
    attribute.write(strdatatype, vec.data());
}

【问题讨论】:

    标签: c++ hdf5


    【解决方案1】:

    答案如下:

    void storeStringAttribute(H5::H5Location& group, string name, vector<string>& array)
    {
        hsize_t dims[1];
        dims[0] = array.size();
    
        H5::StrType strdatatype(H5::PredType::C_S1, maxStringSize+1);
        strdatatype.setSize(H5T_VARIABLE);
    
        H5::DataSpace dataspace = H5::DataSpace(1, dims);
        H5::Attribute attribute = group.createAttribute(name.c_str(), strdatatype, dataspace);
        attribute.write(strdatatype, vec.data());
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 2015-09-29
      • 2014-07-04
      • 2019-11-06
      • 2018-09-07
      • 2021-03-17
      • 1970-01-01
      • 2023-03-10
      • 2018-12-08
      相关资源
      最近更新 更多