首页 > 编程语言 >C++实现进制转换工具

C++实现进制转换工具

时间:2024-06-03 15:45:22浏览次数:27  
标签:std binary 转换 进制 int decimal C++ 十进制 string

下面是一个使用C++编写的简单数制转换工具,该工具包含了二进制、十进制和十六进制之间的转换功能。

二进制转十进制

int binaryToDecimal(const std::string& binary) {
    int decimal = 0, base = 1;
    int len = binary.length();
    for (int i = len - 1; i >= 0; --i) {
        if (binary[i] == '1') {
            decimal += base;
        }
        base *= 2;
    }
    return decimal;
}

这段代码通过遍历二进制字符串,从右到左计算每个位上的值,并累加到decimal变量中。

十进制转二进制

std::string decimalToBinary(int decimal) {
    std::string binary = "";
    while (decimal > 0) {
        binary = (decimal % 2 == 0 ? '0' : '1') + binary;
        decimal /= 2;
    }
    return binary;
}

该函数通过不断除以2并取余数,得到二进制的每一位,直到十进制数为0。

十进制转十六进制
使用C++标准库中的stringstream和hex操作符可以方便地实现十进制和十六进制之间的转换。

std::string decimalToHexadecimal(int decimal) {
    std::stringstream ss;
    ss << std::hex << std::uppercase << decimal;
    return ss.str();
}

十六进制转十进制

int hexadecimalToDecimal(const std::string& hexadecimal) {
    std::stringstream ss(hexadecimal);
    int decimal;
    ss >> std::hex >> decimal;
    return decimal;
}

主函数与用户交互
主函数main()负责处理用户输入和输出,以及调用上述转换函数。用户首先选择一个转换选项,然后输入相应的数字。程序将根据用户的选择进行相应的数制转换,并输出结果。

int main() {
    int choice;
    std::string input;
    std::cout << "请输入您的选择:\n";  
    std::cout << "1. 二进制转十进制\n";  
    std::cout << "2. 二进制转十六进制\n";  
    std::cout << "3. 十进制转二进制\n";  
    std::cout << "4. 十进制转十六进制\n";  
    std::cout << "5. 十六进制转二进制\n";  
    std::cout << "6. 十六进制转十进制\n";
    std::cin >> choice;

    std::cout << "请输入数字: ";  
    std::cin >> input;  
  
    std::transform(input.begin(), input.end(), input.begin(), ::tolower); // 转换为小写以进行十六进制转换  
  
    switch (choice) {  
        case 1: // 二进制转十进制  
            std::cout << "十进制: " << binaryToDecimal(input) << std::endl;  
            break;  
        case 2: // 二进制转十六进制  
            std::cout << "十六进制: " << decimalToHexadecimal(binaryToDecimal(input)) << std::endl;  
            break;  
        case 3: // 十进制转二进制  
            std::cout << "二进制: " << decimalToBinary(std::stoi(input)) << std::endl;  
            break;  
        case 4: // 十进制转十六进制  
            std::cout << "十六进制: " << decimalToHexadecimal(std::stoi(input)) << std::endl;  
            break;  
        case 5: // 十六进制转二进制  
            std::cout << "二进制: " << decimalToBinary(hexadecimalToDecimal(input)) << std::endl;  
            break;  
        case 6: // 十六进制转十进制  
            std::cout << "十进制: " << hexadecimalToDecimal(input) << std::endl;  
            break;  
        default:  
            std::cout << "选择无效!" << std::endl;  
    }  
    return 0;  
}

标签:std,binary,转换,进制,int,decimal,C++,十进制,string
From: https://www.cnblogs.com/sunwenqi/p/18229009

相关文章

  • 模拟集成电路设计系列博客——6.3.2 单电源正输出转换器
    6.3.2单电源正输出转换器一个快速单端正极输出D/A(一般用于视频RAM中,称为RAMDAC)如下图所示[Colles,1988]:此处,一个匹配反馈回路被用于精确已知的电流源偏置(注意,此处放大器的输入连接看上去是反的,但是由于信号通过\(Q_4\)反相,因此这样连接才是对的)。同时,为了保持独立于\(V_{out}......
  • C++ primer plus习题及解析第七章(函数C++编程模块)
    题目:7.1编写一个程序,不断要求用户输入两个数,直到其中的一个为0。对于每两个数,程序将使用一个函数来计算它们的调和平均数,并将结果返回给main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下:调和平均数=2.0*x*y/(x+y)代码: intharmonic_averag......
  • 十大滤波(C++版)
    在翻阅了网上多个版本的滤波算法,发现很多仍停留在多年以前,很多版本的更替没有完成。自己和小伙伴研究了一下,研究成果如下,因为都是比较浅显的研究,如果有不符合常理的地方,请大家指出,一起进步。一、限幅滤波#include<iostream>#include<cmath>#include<vector>usingnamespa......
  • JavaScript第三讲:解锁JavaScript的数据世界:基本数据类型与类型转换的奥秘
    前言:hello,大家好,在JavaScript的编程世界中,数据是构成一切的基础。无论是构建复杂的Web应用,还是处理用户输入,我们都无法绕开数据这一核心元素。而在JavaScript中,数据以不同的形式存在,我们称之为数据类型。理解这些数据类型以及它们之间的转换关系,对于编写高效、健壮的代码至关......
  • 计算机网络-数制转换与子网划分
    目录一、了解数制1、计算机的数制2、二进制3、八进制4、十进制5、十六进制二、数制转换1、二进制转十进制2、八进制转十进制3、十六进制转十进制4、十进制转二进制5、十进制转八进制6、十进制转十六进制三、子网划分1、IP地址定义2、IP的两种协议介绍2.1、......
  • c/c++设计模式---享元模式
    引入享元模式:围棋游戏:namespace_nmsp1{enumEnumColor//棋子类型{Black,//黑White//白};structPosition//棋子位置{intm_x;intm_y;Position(inttmpx,inttmpy):m_x(tmpx),m_y(tmpy){}......
  • C++:特殊类设计和四种类型转换
    一、特殊类设计1.1不能被拷贝的类     拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。C++98:1、将拷贝构造函数与赋值运算符重载只声明不定义。(防自己人)    ......
  • # 数据转换-16进制字符
    数据转换-16进制字符任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理代码,gitcommit不能少于5次在附件中的utils.h和utils.c中完成16进制字符'0'-'9','A'-'F','a'-'f'与十六进制数据0-15的转换功能(10’):intHex2Char(unsignedintfromi......
  • 数据转换-整数字节数组
    数据转换-整数字节数组一、任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理代码,gitcommit不能少于5次1参考《GMT0009-2012SM2密码算法使用规范》第6节“数据转换”在utils.h和utils.c中完成整数与8位字节串的转换功能(10'):intInt2ByteArr......
  • Visual Studio 2022创建C/C++项目
    没想到还有能用到C/C++的时候……刚好忘记怎么用VisualStudio了,写个博客记录一下 参考——https://blog.csdn.net/Long_xu/article/details/130599633https://learn.microsoft.com/zh-cn/visualstudio/extensibility/vsix/get-started/get-tools?view=vs-2022版本:VisualS......