snprintf c ++替代方案

时间:2015-03-26 06:30:02

标签: c++ c++11 printf string-formatting

如何将此代码从C转换为C ++?

char out[61]; //null terminator
for (i = 0; i < 20; i++) {
    snprintf(out+i*3, 4, "%02x ", obuf[i])
}

我无法为snprintf找到任何替代方案。

4 个答案:

答案 0 :(得分:7)

使用stringstream中的<sstream>课程。

E.g:

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
using namespace std;

int main()
{
    stringstream ss;
    for (int i = 0; i < 20; i++) {
        ss << setw(3) << i;
    }
    cout << "Resulting string: " << endl;
    cout << ss.str() << endl;
    printf("Resulting char*: \n%s\n", ss.str().c_str() );
    return 0;
}

答案 1 :(得分:2)

如果您有#include <cstdio>并输入std::snprintf(或using namespace std;),则此代码为有效的C ++ 11。

无需“修复”未破坏的内容。

答案 2 :(得分:0)

您可以使用Boost.Format

#include <boost/format.hpp>
#include <string>

std::string out;
for (size_t i=0; i<20; ++i)
    out += (boost::format("%02x") % int(obuf[i])).str();

答案 3 :(得分:0)

您可以使用标准库的std::stringstreamiomanip I / O流操纵器轻松地将此代码从C转换为C ++:

#include <sstream>
#include <iomanip>
...

std::ostringstream stream;
stream << std::setfill('0') << std::hex;

for (const auto byte : obuf)
  stream << std::setw(2) << byte;

const auto out = stream.str();