snprintf c++ 替代方案
snprintf c++ alternative
如何将此代码从 C 转换为 C++?
char out[61]; //null terminator
for (i = 0; i < 20; i++) {
snprintf(out+i*3, 4, "%02x ", obuf[i])
}
我找不到 snprintf
的替代方案。
使用 <sstream>
中的 stringstream
class。
例如:
#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;
}
您可以使用 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();
此代码是有效的 C++11,如果您有 #include <cstdio>
并键入 std::snprintf
(或 using namespace std;
)。
没必要"fix"没坏的。
您可以使用标准库的 std::stringstream
和 iomanip
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();
如何将此代码从 C 转换为 C++?
char out[61]; //null terminator
for (i = 0; i < 20; i++) {
snprintf(out+i*3, 4, "%02x ", obuf[i])
}
我找不到 snprintf
的替代方案。
使用 <sstream>
中的 stringstream
class。
例如:
#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;
}
您可以使用 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();
此代码是有效的 C++11,如果您有 #include <cstdio>
并键入 std::snprintf
(或 using namespace std;
)。
没必要"fix"没坏的。
您可以使用标准库的 std::stringstream
和 iomanip
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();