c++ - 使用 C++ fmtlib,有没有比使用 std::ostringstream 更简洁的方法将数据序列附加到字符串?
问题描述
fmtlib 包提供了一种干净、可读且快速的方式来格式化 C++ 中的字符串数据,但我找不到一种干净且可读的方式来使用它将数据序列附加到字符串。
经过多次谷歌搜索,我想出了一个可行的解决方案,但它比使用标准流和 V 形的典型方法要冗长得多。我不能使用 fmtlib 的任何/许多示例,所以我希望那里的一些专家知道一种更简洁的方法。
// Here is an fmtlib version of dump_line. I don't like it. using 'cout' seems cleaner and simpler.
virtual void dump_line( const char* msg, uint8_t* dataline )
{
fmt::memory_buffer out;
format_to(out, "{} :", msg);
for( int jj=0; jj<m_cacheStore.p_LineSize; jj++) {
format_to(out, " [{}]={}", jj, (int)dataline[jj] );
}
fmt::print("{}\n",fmt::to_string(out) );
}
// Here is the typical approach using cout and chevrons.
// Nice and simple.
virtual void dump_line( const char* msg, uint8_t* dataline )
{
cout << msg << " : " ;
for( int jj=0; jj<m_cacheStore.p_LineSize; jj++)
cout << " [" << jj << "]=" << (int)dataline[jj];
cout<<endl;
}
我只是将一个整数数组转储到标准输出,如下所示: [0]=2 [1]=0 [2]=0 [3]=0 [4]=1 [5]=0 [6]= 0 [7]=0
解决方案
您可以直接写入输出流而无需中间缓冲区:
virtual void dump_line(const char* msg, uint8_t* dataline) {
fmt::print("{} :", msg);
for (int jj=0; jj<m_cacheStore.p_LineSize; jj++) {
fmt::print(" [{}]={}", jj, dataline[jj]);
}
fmt::print("\n");
}
请注意,您不需要强制dataline[jj]
转换为int
,因为与 iostream 不同,{fmt} 可以正确处理uint8_t
.
如果您想构建一个字符串,您可以写入 amemory_buffer
或传递back_insert_iterator
给format_to
.
推荐阅读
- javascript - 在输入中设置一个变量
- java - 如何将千分尺指标实现为动态地图
- powerbi - DAX 公式错误 - 努力解决它
- javascript - 在 json,node.js 中查找对象的值
- google-chrome - 究竟什么是“Google Chrome 助手 (GPU)”?
- c - C中易失性非静态局部变量的原因
- javascript - 如何将两个函数值添加到单个输入
- vb.net - 如何在图像保存在资源文件夹中的表单应用程序中更改用户控件的背景图像属性?
- python - 使用Python中的数组递归查找字典中的元素
- python - 在熊猫/python中转换日期的防弹方法