首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将动态特征向量的向量转换为字节

将动态特征向量的向量转换为字节
EN

Stack Overflow用户
提问于 2019-06-21 03:08:28
回答 1查看 197关注 0票数 1

我有一个将静态Eigen向量转换为字节向量的函数:

代码语言:javascript
复制
template<typename T, int N>
static std::vector<uint8_t> toBytes(std::vector<Eigen::Matrix<T, N, 1>> const & vectors)
{
    std::vector<uint8_t> bytes;
    uint8_t const * rawData = reinterpret_cast<uint8_t const *>(vectors.data());
    bytes.insert(bytes.end(), rawData, rawData + vectors.size() * N * sizeof(T));
    return bytes
}

这就足够了,直到出现动态Eigen向量(即Eigen::VectorXf),它的N设置为-1。所以我想出了这个:

代码语言:javascript
复制
template<typename T>
static std::vector<uint8_t> toBytes(std::vector<Eigen::Matrix<T, -1, 1>> const & vectors)
{
    std::vector<uint8_t> bytes;
    uint8_t const * rawData = reinterpret_cast<uint8_t const *>(vectors.data());
    bytes.insert(bytes.end(), rawData, rawData + vectors.size() * sizeof(vectors[0]));
    return bytes
}

然而,这会产生一个比预期大四倍的向量,所以我猜动态向量不能简单地转换为字节作为静态向量。我可以像这样解决大小问题:

代码语言:javascript
复制
template<typename T>
static std::vector<uint8_t> toBytes(std::vector<Eigen::Matrix<T, -1, 1>> const & vectors)
{
    std::vector<uint8_t> bytes;
    uint8_t const * rawData = reinterpret_cast<uint8_t const *>(vectors.data());
    bytes.insert(bytes.end(), rawData, rawData + vectors.size() *  vectors[0].size() * sizeof(T));
    return bytes
}

这将导致具有正确长度的向量填充值,但这些值不正确。如何将动态Eigen向量转换为字节向量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 03:24:40

好的,有一个非常明显的解决方案:

代码语言:javascript
复制
template<typename T>
static std::vector<uint8_t> createBuffer(std::vector<Eigen::Matrix<T, -1, 1>> const & vectors)
{
    std::vector<uint8_t> & bytes = buffer.bytes;
    bytes.reserve(vectors.size() * vectors[0].size() * sizeof(T));

    for (auto const & vector : vectors)
    {
        for (int i = 0; i < vector.size(); ++i)
        {
            uint8_t const * rawData = reinterpret_cast<uint8_t const *>(&vector(0));
            bytes.insert(bytes.end(), rawData, rawData + sizeof(T));
        }
    }

    return bytes;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56692437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档