【发布时间】:2019-06-21 03:24:39
【问题描述】:
我有一个函数可以将静态Eigen 向量转换为字节向量:
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。所以我想出了这个:
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
}
然而,这会产生一个比预期大四倍的向量,所以我猜动态向量不能作为静态向量简单地转换为字节。我可以像这样解决大小问题:
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 向量转换为字节向量?
【问题讨论】: