#include <sstream>
#include <string>
#include <exception>
template<class T>
std::string ToStr(const T &value)
{
std::ostringstream oss;
if(!(oss<<std::dec<<value))throw exception("Invalid argument");
return oss.str();
}
template<class T>
T ToInt(const std::string &str)
{
if(str.size()==0)return 0;
std::istringstream iss(str);
T result=0;
if(!(iss>>std::dec>>result))throw exception("Invalid argument");
return result;
}
template<class T>
T HexToInt(const std::string &str)
{
if(str.size()==0)return 0;
std::istringstream iss(str);
T result=0;
if(!(iss>>std::hex>>result))throw exception("Invalid argument");
return result;
}
template<class T>
std::string ToHex(const T &value)
{
std::ostringstream oss;
if(!(oss<<std::hex<<value))throw exception("Invalid argument");
return oss.str();
}