[英]Convert vector of dynamic Eigen vectors to bytes
我有一個將靜態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
Eigen::VectorXf
,這已經足夠了。 所以我想出了這個:
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
向量轉換為字節向量?
好的,對此有一個非常明顯的解決方案:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.