C++模板实现(10进制转换为16进制)

该代码片段展示了如何使用C++模板来实现10进制到16进制的转换,支持uint8_t、uint16_t、uint32_t和uint64_t类型。通过std::stringstream和类型检查模板元编程实现,转换过程中确保数据正确填充并以0x开头。
摘要由CSDN通过智能技术生成

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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值