Вы не можете знать количество цифр, которое было «введено пользователем» , за исключением случаев, когда вы уже прочитали его через «массив» (char*
, std::string
, ...).
Если у вас есть unsigned long long
, размер переменной в любом случае будет 8
байт:
unsigned long long a = 0x1; // This will internally be: 0x0000000000000001
Теперь, если вы хотите вернуть начальные нули изфактический тип в std::string
, я думаю, что следующее должно помочь (как уже упоминалось в других ответах):
template <typename T>
std::string to_string(const T & val)
{
std::stringstream oss;
oss << std::hex << std::setfill('0') << std::setw(sizeof(T)*2) << val;
return oss.str();
}
Но, возможно, было бы лучше перегрузить функцию для любых целочисленных типов, которые вы хотитеиспользовать вместо template
.Потому что если кто-то вызывает функцию с типом, который не является short
, int
, long
, long long
(соответственно unsigned
), функция будет нарушена.