二进制八进制十六进制转十进制,十进制转二进制八进制十六进制,C#与c++实现,学习日志

devtools/2024/12/22 23:11:59/

二进制八进制十六进制转十进制 与相反的C#实现

返回值带有开头,0b,0o,0x,返回值是string类型

       static void Main(string[] args){//0b或者0B//0O 或者0//直接写//0x或者0XConvertDecimalToBinary(7).ForEach(x => { Console.Write(x); });Console.WriteLine();ConvertDecimalToOctal(10).ForEach(x => { Console.Write(x); });Console.WriteLine();ConvertDecimalToHexadecimal(10).ForEach(x => { Console.Write(x); });Console.WriteLine();// 二进制转十进制string binaryString = "0B111110101";int binaryToDecimal = BinaryToDecimal(binaryString);Console.WriteLine($"Binary {binaryString} to Decimal: {binaryToDecimal}");// 八进制转十进制string octalString = "0o15231413416";int octalToDecimal = OctalToDecimal(octalString);Console.WriteLine($"Octal {octalString} to Decimal: {octalToDecimal}");// 十六进制转十进制string hexString = "0x1AAD123";int hexToDecimal = HexToDecimal(hexString);Console.WriteLine($"Hexadecimal {hexString} to Decimal: {hexToDecimal}");Console.ReadKey();Console.ReadKey();Console.ReadKey();}#region 十进制转成二进制,八进制,十六进制,使用取余法/// <summary>/// 十进制转二进制/// </summary>/// <param name="number">十进制数字</param>/// <returns>二进制List,以0b开头</returns>private static List<string> ConvertDecimalToBinary(int number){List<string> list = new List<string>();while (number > 0){int remainder = number % 2;list.Add(remainder.ToString());number = number / 2;}list.Add("0b");list.Reverse();return list;}/// <summary>/// 十进制转八进制/// </summary>/// <param name="number">八进制数字</param>/// <returns>八进制List,以0o开头</returns>private static List<string> ConvertDecimalToOctal(int number){List<string> list = new List<string>();while (number > 0){int remainder = number % 8;list.Add(remainder.ToString());number = number / 8;}list.Add("0o");list.Reverse();return list;}/// <summary>/// 十进制转十六进制进制/// </summary>/// <param name="number">十进制数字</param>/// <returns>十六进制List,以0x开头</returns>private static List<string> ConvertDecimalToHexadecimal(int number){List<string> list = new List<string>();while (number > 0){int remainder = number % 16;if (remainder == 10){list.Add("A");}else if (remainder == 11){list.Add("B");}else if (remainder == 12){list.Add("C");}else if (remainder == 13){list.Add("D");}else if (remainder == 14){list.Add("E");}else if (remainder == 15){list.Add("F");}else{list.Add(remainder.ToString());}number = number / 16;}list.Add("0x");list.Reverse();return list;}#endregion#region 二进制八进制十六进制 转成二进制//public static double Pow(double base, double exponent); //base:基数,即要进行幂运算的数。 exponent:指数,即幂运算的次数。//Math.Pow(2, 10) = 1024/// <summary>///  二进制转成十进制/// </summary>/// <param name="binary">0B二进制数</param>/// <returns>十进制数</returns>static int BinaryToDecimal(string binary){if (binary.StartsWith("0b") || binary.StartsWith("0B")){binary = binary.Substring(2);}int decimalValue = 0;int power = 0;for (int i = binary.Length - 1; i >= 0; i--){if (binary[i] == '1'){decimalValue += (int)Math.Pow(2, power);}power++;}return decimalValue;}/// <summary>/// 八进制转成十进制/// </summary>/// <param name="octal">0O八进制数字</param>/// <returns>十进制数字</returns>static int OctalToDecimal(string octal){if (octal.StartsWith("0o") || octal.StartsWith("0O")){octal = octal.Substring(2);}int decimalValue = 0;int power = 0;for (int i = octal.Length - 1; i >= 0; i--){int digit = octal[i] - '0';decimalValue += digit * (int)Math.Pow(8, power);power++;}return decimalValue;}/// <summary>/// 十六进制转成十进制/// </summary>/// <param name="hex">0x十六进制数字</param>/// <returns>十进制数</returns>/// <exception cref="ArgumentException">字符串中包含的字符不在0-9或者A-F中</exception>static int HexToDecimal(string hex){if (hex.StartsWith("0x") || hex.StartsWith("0X")){hex = hex.Substring(2);}int decimalValue = 0;int power = 0;for (int i = hex.Length - 1; i >= 0; i--){int digit;if (hex[i] >= '0' && hex[i] <= '9'){digit = hex[i] - '0';}else if ((hex[i] >= 'A' && hex[i] <= 'F') || (hex[i] >= 'a' && hex[i] <= 'f')){digit = hex[i] >= 'a' ? hex[i] - 'a' + 10 : hex[i] - 'A' + 10;}else{throw new ArgumentException("Invalid hexadecimal character");}decimalValue += digit * (int)Math.Pow(16, power);power++;}return decimalValue;}#endregion

二进制八进制十六进制转十进制 与相反的C++实现

c++版本是c++11
auto 推断类型,类似与c#中的var,
std::vector<std::string> 是 C++ 标准库中的一个容器类型,用于存储一组 std::string 类型的元素,动态数组的一种实现。在c#表现为List。

头文件,转化文件,main.cpp

头文件NumberConversion.h


#ifndef NUMBERCONVERSION_H
#define NUMBERCONVERSION_H#include <vector>
#include <string>// 十进制转二进制
std::vector<std::string> ConvertDecimalToBinary(int number);// 十进制转八进制
std::vector<std::string> ConvertDecimalToOctal(int number);// 十进制转十六进制
std::vector<std::string> ConvertDecimalToHexadecimal(int number);// 二进制转十进制
int BinaryToDecimal(const std::string& binary);// 八进制转十进制
int OctalToDecimal(const std::string& octal);// 十六进制转十进制
int HexToDecimal(const std::string& hex);#endif // NUMBERCONVERSION_H

转换文件,NumberConversion.cpp

#include "NumberConversion.h"
#include <algorithm>
#include <cmath>// 十进制转二进制
std::vector<std::string> ConvertDecimalToBinary(int number) {std::vector<std::string> list;while (number > 0) {int remainder = number % 2;list.push_back(std::to_string(remainder));number = number / 2;}list.push_back("0b");std::reverse(list.begin(), list.end());return list;
}// 十进制转八进制
std::vector<std::string> ConvertDecimalToOctal(int number) {std::vector<std::string> list;while (number > 0) {int remainder = number % 8;list.push_back(std::to_string(remainder));number = number / 8;}list.push_back("0o");std::reverse(list.begin(), list.end());return list;
}// 十进制转十六进制
std::vector<std::string> ConvertDecimalToHexadecimal(int number) {std::vector<std::string> list;while (number > 0) {int remainder = number % 16;if (remainder == 10) {list.push_back("A");} else if (remainder == 11) {list.push_back("B");} else if (remainder == 12) {list.push_back("C");} else if (remainder == 13) {list.push_back("D");} else if (remainder == 14) {list.push_back("E");} else if (remainder == 15) {list.push_back("F");} else {list.push_back(std::to_string(remainder));}number = number / 16;}list.push_back("0x");std::reverse(list.begin(), list.end());return list;
}// 二进制转十进制
int BinaryToDecimal(const std::string& binary) {std::string bin = binary;if (bin.substr(0, 2) == "0b" || bin.substr(0, 2) == "0B") {bin = bin.substr(2);}int decimalValue = 0;int power = 0;for (int i = bin.length() - 1; i >= 0; i--) {if (bin[i] == '1') {decimalValue += static_cast<int>(std::pow(2, power));}power++;}return decimalValue;
}// 八进制转十进制
int OctalToDecimal(const std::string& octal) {std::string oct = octal;if (oct.substr(0, 2) == "0o" || oct.substr(0, 2) == "0O") {oct = oct.substr(2);}int decimalValue = 0;int power = 0;for (int i = oct.length() - 1; i >= 0; i--) {int digit = oct[i] - '0';decimalValue += digit * static_cast<int>(std::pow(8, power));power++;}return decimalValue;
}// 十六进制转十进制
int HexToDecimal(const std::string& hex) {std::string hexa = hex;if (hexa.substr(0, 2) == "0x" || hexa.substr(0, 2) == "0X") {hexa = hexa.substr(2);}int decimalValue = 0;int power = 0;for (int i = hexa.length() - 1; i >= 0; i--) {int digit;if (hexa[i] >= '0' && hexa[i] <= '9') {digit = hexa[i] - '0';} else if ((hexa[i] >= 'A' && hexa[i] <= 'F') || (hexa[i] >= 'a' && hexa[i] <= 'f')) {digit = hexa[i] >= 'a' ? hexa[i] - 'a' + 10 : hexa[i] - 'A' + 10;} else {throw std::invalid_argument("Invalid hexadecimal character");}decimalValue += digit * static_cast<int>(std::pow(16, power));power++;}return decimalValue;
}

main.cpp

#include <iostream>
#include "NumberConversion.h"int main() {// 十进制转二进制auto binaryList = ConvertDecimalToBinary(7);for (const auto& x : binaryList) {std::cout << x;}std::cout << std::endl;// 十进制转八进制auto octalList = ConvertDecimalToOctal(10);for (const auto& x : octalList) {std::cout << x;}std::cout << std::endl;// 十进制转十六进制auto hexList = ConvertDecimalToHexadecimal(10);for (const auto& x : hexList) {std::cout << x;}std::cout << std::endl;// 二进制转十进制std::string binaryString = "0B111110101";int binaryToDecimal = BinaryToDecimal(binaryString);std::cout << "Binary " << binaryString << " to Decimal: " << binaryToDecimal << std::endl;// 八进制转十进制std::string octalString = "0o15231413416";int octalToDecimal = OctalToDecimal(octalString);std::cout << "Octal " << octalString << " to Decimal: " << octalToDecimal << std::endl;// 十六进制转十进制std::string hexString = "0x1AAD123";int hexToDecimal = HexToDecimal(hexString);std::cout << "Hexadecimal " << hexString << " to Decimal: " << hexToDecimal << std::endl;return 0;
}

http://www.ppmy.cn/devtools/86565.html

相关文章

RabbitMQ高级篇(如何保证消息的可靠性、如何确保业务的幂等性、延迟消息的概念、延迟消息的应用)

文章目录 1. 消息丢失的情况2. 生产者的可靠性2.1 生产者重连2.2 生产者确认2.3 生产者确认机制的代码实现2.4 如何看待和处理生产者的确认信息 3. 消息代理&#xff08;RabbitMQ&#xff09;的可靠性3.1 数据持久化3.2 LazyQueue&#xff08; 3.12 版本后所有队列都是 Lazy Qu…

PHP表单验证

PHP 表单验证是确保用户输入数据符合特定要求的关键步骤&#xff0c;它有助于维护数据的完整性和准确性&#xff0c;同时提高应用的安全性。以下是一个详细的 PHP 表单验证教程&#xff1a; 一、表单的创建 首先&#xff0c;你需要在 HTML 文档中创建一个表单。表单包含输入字…

Photoshop技巧:按住Ctrl键点击图层缩略图,快速选择不透明像素

在Photoshop中&#xff0c;按住Ctrl键点击图层缩略图是一个常用的操作&#xff0c;它主要用于快速选择该图层中的不透明像素&#xff0c;从而创建一个选区。以下是对这一操作的详细解释&#xff1a; 操作步骤 打开Photoshop并加载图像&#xff1a; 启动Photoshop软件。使用“文…

在 LCD 上显示 png 图片-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在 LCD 上显示 png 图片 PNG 简介 无损压缩&#xff1a;PNG 使用 LZ77 派生算法进行无损压缩&#xff0c;确保图像质量不受损&#xff0c;且压缩比高 体积小&#xff1a;通过高压缩比&#xff0c;PNG 文件体积小&#xff0c;适合网络传输 索引彩色模式&#xff1a;PNG-8 格式…

我出一道面试题,看看你能拿 3k 还是 30k!

大家好&#xff0c;我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场&#xff0c;接下来我会出一道经典的后端面试题&#xff0c;你只需要进行 4 个简单的选择&#xff0c;就能判断出来你的水平是新手&#xff08;3k&#xff09;、初级&#xff08;10k&#xff09;、中…

数据结构初阶(c语言)-排序算法

数据结构初阶我们需要了解掌握的几种排序算法(除了直接选择排序&#xff0c;这个原因我们后面介绍的时候会解释)如下&#xff1a; 其中的堆排序与冒泡排序我们在之前的文章中已经详细介绍过并对堆排序进行了一定的复杂度分析&#xff0c;所以这里我们不再过多介绍。 一&#x…

upload-labs靶场(1-19关)

upload-labs靶场 简介 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关&#xff0c;每一关都包含着不同上传方式。 注意&#xff1a;能运行<?php phpinfo();?&…

Python中神奇面向对象

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;概念&#xff1a;代码示例&#xff1a; 2.继承&#xff08;Inheritance&#xff09;…