当前位置: 首页 > news >正文

随手练——十六进制转八进制 (不限制长度)

网上找了下,好像没有可以从十六进制直接转换到八进制的方法,一般就是转换成10进制或者2进制,再转换成8进制。

分两种情况,如果结果较小的话,用int、long long能装得下的情况下,用16→10→8比较方便:

#include <iostream>
#include <algorithm>
#include <math.h>
#include <string>
using namespace std;
int to_10_system(string s) {
    int res = 0, k = 0;
    reverse(s.begin(), s.end());
    for (int i = 0; i < s.length(); i++) {
        if (s[i] >= 'A'&&s[i] <= 'F') {
            switch (s[i]) {
            case 'A':
                res += pow(16, k++) * 10;
                    break;
            case 'B':
                res += pow(16, k++) * 11;
                break;
            case 'C':
                res += pow(16, k++) * 12;
                break;
            case 'D':
                res += pow(16, k++) * 13;
                break;
            case 'E':
                res += pow(16, k++) * 14;
                break;
            case 'F':
                res += pow(16, k++) * 15;
                break;
            }
        }
        else {
            res += (s[i] - '0')*pow(16, k++);
        }
    }
    return res;
}
int to_8_system(int x) {
    int res = 0, i = 0;
    while (x) {
        res += (x % 8)*pow(10, i++);
        x /= 8;
    }
    return res;
}
int main() {
    
    int n;
    cin >> n;
    while (n--) {
        string s;
        cin >> s;
        cout << to_8_system(to_10_system(s))<<endl;
    }
    return 0;
}

如果数据特别长的话,只能用字符串装的时候,还是16→2→8方便:

#include <iostream>
#include <algorithm>
#include <math.h>
#include <string>

using namespace std;
string to_2_system(string s) {
    string res;
    int k = 0;
    for (int i = 0; i < s.length(); i++) {
        string t;
        //这里偷了个懒 *_*
            switch (s[i]) {
            case '0':
                t = "0000";break;
            case '1':
                t = "0001";break;
            case '2':
                t = "0010";break;
            case '3':
                t = "0011";break;
            case '4':
                t = "0100";break;
            case '5':
                t = "0101";break;
            case '6':
                t = "0110";break;
            case '7':
                t = "0111";break;
            case '8':
                t = "1000";break;
            case '9':
                t = "1001";break;
            case 'A':
                t = "1010";break;
            case 'B':
                t = "1011";break;
            case 'C':
                t = "1100";break;
            case 'D':
                t = "1101";break;
            case 'E':
                t = "1110";break;
            case 'F':
                t = "1111";break;
            }
            res += t;
    }
    while (res.length() % 3 != 0) {
        res.insert(res.begin(), '0');
    }
    return res;
}

string to_8_system(string s) {
    string res;
    for (int i = s.length() - 1; i >= 0; i -= 3) {
        int t = s[i] - '0' + (s[i - 1] - '0') * 2 + (s[i - 2] - '0') * 4;
        if (!(i == 2 && t == 0))
        res += t + '0';
    }
    reverse(res.begin(), res.end());
    return res;
}
int main() {
    
    int n;
    cin >> n;
    while (n--) {
        string s;
        cin >> s;
        cout << to_8_system(to_2_system(s))<<endl;
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/czc1999/p/10381778.html

相关文章:

  • 认识DiffuseAndSpecularFromMetallic和UNITY_BRDF_PBS
  • 如何将自发光和漫反射添加到烘焙贴图中
  • Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形
  • Shadowmask和Distance Shadowmask的区别
  • Angular7_获取异步方法里面的数据
  • maven tomcat jstl 异常
  • maven下载及配置(win7 64位系统)
  • 寒假一:打印沙漏
  • unity depth texture-01
  • LinearEyeDepth和Linear01Depth
  • 打印沙漏
  • SQLAlchemy增删改查 一对多 多对多
  • 体积光,体积雾——链接
  • python 变量搜寻顺序法则LEGB之E注意事项
  • 体积雾
  • Angular 4.x 动态创建组件
  • centos安装java运行环境jdk+tomcat
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • gcc介绍及安装
  • laravel5.5 视图共享数据
  • mockjs让前端开发独立于后端
  • nginx 配置多 域名 + 多 https
  • PHP 小技巧
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • spring boot下thymeleaf全局静态变量配置
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 闭包--闭包之tab栏切换(四)
  • 前端js -- this指向总结。
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何进阶一名有竞争力的程序员?
  • 译有关态射的一切
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​水经微图Web1.5.0版即将上线
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (AngularJS)Angular 控制器之间通信初探
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (四)Controller接口控制器详解(三)
  • (转)fock函数详解
  • (转)一些感悟
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .mysql secret在哪_MySQL如何使用索引
  • .Net FrameWork总结
  • .Net 代码性能 - (1)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET成年了,然后呢?
  • .net开发时的诡异问题,button的onclick事件无效
  • @Bean注解详解
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @Responsebody与@RequestBody
  • @RestController注解的使用
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [JS7] 显示从0到99的100个数字