C++模板实现(10进制转换为16进制)
利用模板实现对固定类型的参数进行10进制到16进制的转换,还可以进一步更新优化,略显粗糙。
备注:is_same:比较两个类型是否一致,C/C++提供了很多类似操作模板库,需要时一个一个查询就行
#include <iostream>
#include <sstream>
#include <type_traits>
#include <iomanip>
template <typename T,
typename = std::enable_if_t<std::is_same<T,uint8_t>::value
or std::is_same<T,uint16_t>::value
or std::is_same<T,uint32_t>::value
or std::is_same<T,uint64_t>::value>
>
void Base_conversion(T data, int num_bits)
{
if((num_bits % 8 !=0) && num_bits <= 64)
{
return;
}
std::stringstream out_stream;
(void)out_stream.fill('0');
out_stream << "0x" << std::right << std::setw(num_bits) << std::hex << data << std::endl;
//测试输出,可删除
char c;
while(out_stream >> c)
{
std::cout << c;
}
std::cout<<"\n";
}
int main()
{
uint16_t number = 23;
Base_conversion(23, 16);
}