【C++教程】进制转换的实现方法

news2025/4/25 10:11:04

在C++中进行进制转换可以通过标准库函数或自定义算法实现。以下是两种常见场景的转换方法及示例代码:

一、使用C++标准库函数

  1. 任意进制转十进制
#include <string>
#include <iostream>

int main() {
    std::string num = "1A3F"; // 十六进制数
    int decimal = stoi(num, nullptr, 16); // 第三个参数指定原始进制
    std::cout << decimal; // 输出:6719
}
  1. 十进制转其他进制
#include <bitset>
#include <iostream>

int main() {
    int num = 255;
    
    // 转二进制(8位)
    std::cout << std::bitset<8>(num) << "\n"; // 11111111
    
    // 转十六进制(小写)
    std::cout << std::hex << num << "\n"; // ff
    
    // 转八进制
    std::cout << std::oct << num; // 377
}

二、自定义转换函数(支持任意2-36进制)

1. 十进制转任意进制
#include <algorithm>
#include <string>

std::string dec_to_base(int num, int base) {
    if (base < 2 || base > 36) return "";
    
    std::string result;
    const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    while (num > 0) {
        result += digits[num % base];
        num /= base;
    }
    
    if (result.empty()) return "0";
    std::reverse(result.begin(), result.end());
    return result;
}

// 示例:dec_to_base(255, 16) 返回 "FF"
2. 任意进制转十进制
#include <cctype>
#include <string>

int base_to_dec(std::string num, int base) {
    if (base < 2 || base > 36) return -1;
    
    int result = 0;
    for (char c : num) {
        int value = isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
        if (value >= base) return -1; // 非法输入
        
        result = result * base + value;
    }
    return result;
}

// 示例:base_to_dec("FF", 16) 返回 255

三、完整示例代码

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

// 十进制转任意进制(2-36)
string dec_to_base(int num, int base) {
    if (base < 2 || base > 36) return "Invalid base";
    
    string result;
    const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    do {
        result += digits[num % base];
        num /= base;
    } while (num > 0);
    
    reverse(result.begin(), result.end());
    return result.empty() ? "0" : result;
}

// 任意进制转十进制(2-36)
int base_to_dec(string num, int base) {
    if (base < 2 || base > 36) return -1;
    
    int result = 0;
    for (char c : num) {
        int value = isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
        if (value >= base) return -1;
        
        result = result * base + value;
    }
    return result;
}

int main() {
    // 十进制255转十六进制
    cout << dec_to_base(255, 16) << endl; // 输出FF
    
    // 二进制11111111转十进制
    cout << base_to_dec("11111111", 2) << endl; // 输出255
    
    // 三十六进制转换示例
    cout << dec_to_base(1234, 36) << endl; // 输出YA
    cout << base_to_dec("YA", 36) << endl;  // 输出1234
    
    return 0;
}

四、注意事项

  1. 有效性检查:需验证输入数值是否合法(如二进制不能包含2-9)
  2. 大小写处理:自定义函数默认处理大写字母,可修改toupper()tolower()处理小写
  3. 负数处理:示例代码未处理负数,需要时可添加符号处理
  4. 大数支持:对于超过int范围的数值,建议使用字符串处理或long long类型

如果需要处理超大数(超过long long范围),需要使用字符串进行逐位计算的算法。这里展示的是最常用的基本实现方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ebpf: CO-RE, BTF, and Libbpf(二)

本文内容主要来源于Learning eBPF&#xff0c;可阅读原文了解更全面的内容。 本文涉及源码也来自于书中对应的github&#xff1a;https://github.com/lizrice/learning-ebpf/ 概述 上篇文章主要讲了CO-RE最关键的一环&#xff1a;BTF&#xff0c;了解其如何记录内核中的数据结…

祁连山国家公园shp格式数据

地理位置 祁连山国家公园位于中国西北部&#xff0c;横跨甘肃省与青海省交界处&#xff0c;主体处于青藏高原东北边缘。总面积约5.02万平方公里&#xff0c;是中国首批设立的10个国家公园之一。 设立背景 保护措施 文化与历史 旅游与教育 意义与挑战 祁连山国家公园的设立标志…

《AI大模型应知应会100篇》 第16篇:AI安全与对齐:大模型的灵魂工程

第16篇&#xff1a;AI安全与对齐&#xff1a;大模型的灵魂工程 摘要 在人工智能技术飞速发展的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为推动社会进步的重要工具。然而&#xff0c;随着这些模型能力的增强&#xff0c;如何确保它们的行为符合人类的期…

探索QEMU-KVM虚拟化:麒麟系统下传统与云镜像创建虚拟机的最佳实践

随着云计算和虚拟化技术的不断进步&#xff0c;虚拟化在管理服务器、隔离资源以及提升性能方面的好处越来越明显。麒麟操作系统Kylin OS是我们国家自己开发的操作系统&#xff0c;在政府机构和企业中用得很多。这篇文章会教你如何在麒麟操作系统上设置QEMU-KVM虚拟化环境&#…

[ComfyUI] 最新控制模型EasyControl,吉卜力风格一键转绘

一、EasyControl介绍 玩ComfyUI的都知道Controlnet的重要性&#xff0c;可以根据约束来引导图片的生成&#xff0c;这也是ComfyUI商业化里面很重要的一环。 不过之前我们用的Controlnet都是基于Unet技术框架下的。 最近出的这个EasyControl有点不一样&#xff0c;是基于DiT&a…

LR(0)

LR0就是当我处在自动机为红色这些结束状态的时候&#xff0c;这些红色状态就代表我们识别到了一个句柄&#xff0c;那现在的问题就是识别到了句柄&#xff0c;那要不要对他进行归约&#xff1f;LR0就是我不管当前指针指向的终结符是什么&#xff0c;我都拿它做规约 这里的二号状…

无人船 | 图解基于视线引导(LOS)的无人艇制导算法

目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法&#xff08;Line of Sight, LOS&#xff09;作为无人水面艇&#xff08;USV&#xff09;自主导航领域的核心技术&#xff0c;通过几何制导与动态控制深度融合的机制&am…

3.2.2.3 Spring Boot配置拦截器

在Spring Boot应用中配置拦截器&#xff08;Interceptor&#xff09;可以对请求进行预处理和后处理&#xff0c;实现如权限检查、日志记录等功能。通过实现HandlerInterceptor接口并注册到Spring容器&#xff0c;拦截器可以自动应用到匹配的请求路径。案例中&#xff0c;创建了…

大模型文生图

提示词分4个部分&#xff1a;质量&#xff0c;主体&#xff0c;元素&#xff0c;风格 质量&#xff1a;杰作&#xff0c;高质量&#xff0c;超细节&#xff0c;完美的精度&#xff0c;高分辨率&#xff0c;大师级的&#xff1b; 权重&#xff1a;把图片加括号&#xff0c;&am…

LeetCode 118题解 | 杨辉三角

题目链接: https://leetcode.cn/problems/pascals-triangle/description/ 题目如下&#xff1a; 解题过程如下&#xff1a; 杨辉三角就是一个不规则的二维数组&#xff0c;实际上是一个直角三角形。如图所示&#xff1a; 杨辉三角特点&#xff1a;每一行的第一个和最后一个都是…

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器&#xff0c;这些容器可以分为两类 用户程序所在的容器&#xff0c;数量可多可少Pause 容器&#xff0c;这是每个 Pod 都会有的一个根容器&#xff0c;它的作用有两个 可…

数据库索引深度解析:原理、类型与高效使用实践

&#x1f9e0; 一句话理解索引是什么&#xff1f; 索引就是数据库中的“目录”或“书签”&#xff0c;它能帮助我们快速找到数据的位置&#xff0c;而不是一页页地翻整本书。 &#x1f9e9; 一、为什么需要索引&#xff1f;&#xff08;用生活化例子秒懂&#xff09; 想象你在…

React 记账本项目实战:多页面路由、Context 全局

在本文中,我们将分享一个使用 React 开发的「记账本」项目的实战经验。该项目通过 VS Code 完成,包含首页、添加记录页、编辑页等多个功能页面,采用了 React Router 实现路由导航,使用 Context API 管理全局的交易记录状态,并引入数据可视化组件呈现不同月份的支出情况。项…

易路iBuilder智能体平台:人力资源领域AI落地,给“数据权限管控”一个最优解

近日&#xff0c;加拿大电子商务巨头Shopify的CEO Tobias Ltke分享了一份内部备忘录&#xff0c;明确表示有效使用AI已成为公司对每位员工的基本期望&#xff0c;并指出&#xff1a;各团队在招募新员工前&#xff0c;必须先确定是否能够利用AI完成工作。 而在全球范围内&#…

mybatis--多对一处理/一对多处理

多对一处理&#xff08;association&#xff09; 多个学生对一个老师 对于学生这边&#xff0c;关联&#xff1a;多个学生&#xff0c;关联一个老师[多对一] 对于老师而言&#xff0c;集合&#xff0c;一个老师有多个学生【一对多】 SQL&#xff1a; 测试环境搭建 1.导入依…

计算机视觉——图像金字塔与目标图像边缘检测原理与实践

一、两个图像块之间的相似性或距离度量 1.1 平方差和&#xff08;SSD&#xff09; 平方差和&#xff08;SSD&#xff09; 是一种常用的图像相似性度量方法。它通过计算两个图像在每个对应位置的像素值差的平方和来衡量两个图像之间的整体差异。如果两个图像在每个位置的像素值…

VRoid-Blender-Unity个人工作流笔记

流程 VRoid 选配模型>减面、减材质>导出vrm Blender&#xff08;先有CATS、vrm插件&#xff09; 导入vrm>Fix model>修骨骼>导出fbx Unity 找回贴图、改着色器、调着色器参数…… VRoid 减面 以模型不出现明显棱角为准。脸好像减面100也问题不大。 下…

Domain Adaptation领域自适应

背景与问题定义 传统监督学习假设&#xff1a;训练集与测试集数据分布一致。 Domain Shift&#xff1a;测试数据分布与训练数据不同&#xff0c;模型泛化性能骤降 。 例如在黑白图像上训练数字分类器&#xff0c;测试时用彩色图像&#xff0c;准确率骤降。 Domain Adaptatio…

从自动测量、8D响应到供应链协同的全链路质量管理数字化方案——全星QMS如何破解汽车行业质量困局

全星QMS如何破解汽车行业质量困局&#xff1a;从自动测量、8D响应到供应链协同的全链路数字化方案 在当今竞争激烈的市场环境中&#xff0c;企业要想脱颖而出&#xff0c;必须确保产品质量的稳定性和可靠性。 全星质量QMS软件系统凭借其强大的功能和灵活的架构&#xff0c;为企…

联想电脑开机出现Defalut Boot Device Missing or Boot Failed怎么办

目录 一、恢复bios默认设置 二、关机重启 三、“物理”方法 在图书馆敲代码时&#xff0c;去吃了午饭回来发现刚开机就出现了下图的问题&#xff08;崩溃&#xff09;&#xff0c;想起之前也发生过一次 这样的问题&#xff0c;现在把我用到的方法写在下面&#xff0c;可能对…