如何将 Eigen 库的 Matrix 或 Vector 类型转换为字符串?
How to convert Eigen library's Matrix or Vector types to string?
如何获取 Vector3f 或 Eigen 库中其他类型的文本表示。我看到很多使用 .format() 的示例,其中 returns WithFormat class。然后可以与 cout 一起使用。但是,我正在寻找以某种人类可读的形式将 Vector3f 获取为 std:string 的方法。准确的格式不太重要,所以如果 Eigen 有任何默认格式,那么它也可以。
注意:我当然可以使用 stringstream 来代替 cout,但我希望有更直接的方法来做到这一点。
据我所知,stringstream 方法是可行的方法。事实上,在IO.h文件(Eigen::internal::print_matrix
)中,开发人员使用stringstreams来获取每个条目的宽度。
我最终采用的方法如下:
static std::string toString(const Vector3d& vect)
{
return stringf("[%f, %f, %f]", vect[0], vect[1], vect[2]);
}
static string stringf(const char* format, ...)
{
va_list args;
va_start(args, format);
int size = _vscprintf(format, args) + 1;
std::unique_ptr<char[]> buf(new char[size] );
#ifndef _MSC_VER
vsnprintf(buf.get(), size, format, args);
#else
vsnprintf_s(buf.get(), size, _TRUNCATE, format, args);
#endif
va_end(args);
return string(buf.get());
}
我发现的最简单的解决方案(不确定是否最佳)是:
static std::string toString(const Eigen::MatrixXd& mat){
std::stringstream ss;
ss << mat;
return ss.str();
}
如何获取 Vector3f 或 Eigen 库中其他类型的文本表示。我看到很多使用 .format() 的示例,其中 returns WithFormat class。然后可以与 cout 一起使用。但是,我正在寻找以某种人类可读的形式将 Vector3f 获取为 std:string 的方法。准确的格式不太重要,所以如果 Eigen 有任何默认格式,那么它也可以。
注意:我当然可以使用 stringstream 来代替 cout,但我希望有更直接的方法来做到这一点。
据我所知,stringstream 方法是可行的方法。事实上,在IO.h文件(Eigen::internal::print_matrix
)中,开发人员使用stringstreams来获取每个条目的宽度。
我最终采用的方法如下:
static std::string toString(const Vector3d& vect)
{
return stringf("[%f, %f, %f]", vect[0], vect[1], vect[2]);
}
static string stringf(const char* format, ...)
{
va_list args;
va_start(args, format);
int size = _vscprintf(format, args) + 1;
std::unique_ptr<char[]> buf(new char[size] );
#ifndef _MSC_VER
vsnprintf(buf.get(), size, format, args);
#else
vsnprintf_s(buf.get(), size, _TRUNCATE, format, args);
#endif
va_end(args);
return string(buf.get());
}
我发现的最简单的解决方案(不确定是否最佳)是:
static std::string toString(const Eigen::MatrixXd& mat){
std::stringstream ss;
ss << mat;
return ss.str();
}