数字转字符串
const char digits[] = "9876543210123456789";
const char* zero = digits + 9;
static_assert(sizeof(digits) == 20, "wrong number of digits");
const char digitsHex[] = "0123456789ABCDEF";
static_assert(sizeof digitsHex == 17, "wrong number of digitsHex");
template<typename T>
size_t convert(char buf[], T value)
{
T i = value;
char* p = buf;
// 201 分别取数字 1 0 2
do
{
int lsd = static_cast<int>(i % 10);
i /= 10;
*p++ = zero[lsd];
} while (i != 0);
// 判断 value 是否为负数
if (value < 0)
{
*p++ = '-';
}
*p = '\0';
// 原地反转
std::reverse(buf, p);
return p - buf;
}
首先使用模板函数,节省许多相同的操作。
首先分别取value各个位上的数字。例如231分别取得1,3,2,分别填入缓冲区中。再判断value是否是负数,如果是负数需要在后面添加负号“-”。
使用std::reverse转置,比如132-变成-231。