在程序中需要将一个正整数(如123)转换成一个固定长的串(如8位,00000123)。算法有很多了。我采用可以这个方法123+10^8=100000123,将100000123转换成串"100000123",然后返回这个串的子串substr(1)。在这个方法当中会涉及指数的运算,C++只能作浮点数的指数运算,为提高效率使用模板元编程,将这一过程提前到编译期完成。程序很简单,大家看看就明白了:
template<int d,int pow>
struct Power
{
static const int value = Power<d,pow-1>::value * d;
};
template<int d>
struct Power<d,0>
{
static const int value = 1;
};
/**
* 该函数将一个整数转换成固定长度的0不齐的串,如12->"00012"
*/
template<int len>
std::string int_cast_zerostr(const int i)
{
std::string result = boost::lexical_cast<std::string>(Power<10,len>::value + i);
return result.substr(1);
}
如果要将12转换成"00000012",可使用函数int_cast_zerostr<8>(12)。
谢谢小明的提醒,想起Boost有个format库,所以可以这样
boost::format f("%08d");
std::string s = (f%12).str();
std::cout<<s; //s = "00000012"
不过个人更喜欢int_cast_zerostr<8>(12)方式。呵呵!