大数据string八进制转为string十六进制(通过string的二进制)

int main()
{
string a("055123124543535254554539845934584845945893485394834444428472398479234738");
string b; //二进制
string c; //十六进制
for (auto i = a.size() - 1; i >= 1; --i)
{
for (auto j = stoi(a.substr(i, 1)), z = 0; j != 0 || z < 3; ++z)
{
b = std::to_string(j % 2) + b;
j /= 2;
}
}


if (b.size() % 4) //位零则除去,有1则加零到4位 转换成4位4位的2进制
{
auto i = b.size() % 4;
for (auto j = 0; j < i; ++j)
{
if (stoi(b.substr(j, 1)))
{
for (auto z = 0; z < 4 - i; ++z)
b = std::to_string(0) + b;
}
}
if (b.size() % 4)
b.erase(0, i);
}


for (auto i = 0; i < b.size();)
{
auto n = stoi(b.substr(i, 1)) * 8 + stoi(b.substr(i + 1, 1)) * 4\
+ stoi(b.substr(i + 2, 1)) * 2 + stoi(b.substr(i + 3, 1));
i += 4;
switch (n)
{
case 10:c += "a"; break;
case 11:c += "b"; break;
case 12:c += "c"; break;
case 13:c += "d"; break;
case 14:c += "e"; break;
case 15:c += "f"; break;
default:c += std::to_string(n); break;
}
}
cout << "0x" << c << endl;


return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值