我有一个接受几个整数参数的函数,然后需要转换为固定长度为4的ASCII字符串表示。即4变为“0004”,42变为“0042”。假设参数将为0 <= n <= 9999
是安全的我可以用以下的方式做到:
void foo(int a, int b) {
std::string sa = std::to_string(a);
std::string sb = std::to_string(b);
for(int i = sa.length; i < 4; i++)
sa.insert(0,"0");
...
}
但这似乎比我需要的更多,特别是如果有很多参数转换。有没有更有效的方法来做到这一点?
编辑:目标不是打印生成的字符串。
编辑2:基于ss << std::setw( 4 ) << std::setfill( '0' ) << number;
的内容做了我需要的内容,感谢您的评论。
答案 0 :(得分:1)
我认为snprintf是一个很好的候选人:
#include <cstdio>
#include <iostream>
int main() {
char buffer[5];
// Prints: 0001
snprintf(buffer, 5, "%04d", 1);
std::cout << buffer << '\n';
// Prints: 1234 (not the 5)
snprintf(buffer, 5, "%04d", 12345);
std::cout << buffer << '\n';
}
答案 1 :(得分:1)
您可以使用std::ostringstream
并将其视为输出流:
std::ostringstream ss;
ss << std::setw( 4 ) << std::setfill( '0' ) << number;
Send_To_Serial(ss.str().c_str());