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

十六进制字符转十进制算法

十六进制与十进制对照

十六进制十进制
00
11
22
33
44
55
66
77
88
99
A10
B11
C12
D13
E14
F15

十六进制与十进制区别

十六进制是满16进1,十进制是满10进1,这里要注意下区别,16进制的字符里面为什么是0-9没有10,这里面进了一位,表示16了。

十六进制转十进制的算法逻辑

处理转换过程分为正序和逆序

正序

从左到右加权累加,每次往右加一个数的时候,原来的数字需要向左变高位移动一位,就是乘以16。比如有一个“1A3”,result记录十进制累加值初始为0,

我们遍历第一次,是1进来:

result=result*16+1=0*16+1=1

第二次,A进来==10,1左移一位:

result=result*16+10=1*16+10=26

第三次,3进来,1A左移一位:

result=result*16+3=26*16+3=419

整体公式其实就是:

result=1*16^2+A*16^1+3*16^0

实现

int hexToDecimalManual(const std::string& hexStr) {int result = 0;size_t startIdx = (hexStr.substr(0, 2) == "0x" || hexStr.substr(0, 2) == "0X") ? 2 : 0;for (size_t i = startIdx; i < hexStr.size(); ++i) {char c = hexStr[i];int value;if (isdigit(c)) {value = c - '0';} else if (c >= 'A' && c <= 'F') {value = 10 + c - 'A';} else if (c >= 'a' && c <= 'f') {value = 10 + c - 'a';} else {break; // 非法字符终止转换}result = result * 16 + value; // 逆序权值累加}return result;
}

逆序

逆序是从右到左遍历字符串,有一个base记录处理的权值,每次引入的字符都是更高位的字符,需要做一个权值处理,实现起来和正序差不多,注意方向就行

实现

long long hexToDecimal_Reverse(const string& hex) {long long result = 0;long long base = 1; // 初始权值为16^0=1for (int i = hex.length() - 1; i >= 0; i--) {char c = hex[i];int val;if (c >= '0' && c <= '9') {val = c - '0';} else if (c >= 'A' && c <= 'F') {val = 10 + c - 'A';} else if (c >= 'a' && c <= 'f') {val = 10 + c - 'a';} else {throw invalid_argument("非法十六进制字符");}// 动态调整权值result += val * base;base *= 16; // 权值左移(如1→16→256)}return result;
}// 示例输入:hex = "1A3" → 输出419

不建议使用math库的pow,复杂度高了

http://www.xdnf.cn/news/9012.html

相关文章:

  • C++——STL——unordered_map与unordered_set的使用以及使用哈希表封装unordered_map/set
  • https的进化之路(八卦版)
  • JVM 深度解析
  • k-way Hypergraph Partitioning via n-Level Recursive Bisection【2016 ALENEX】文献总结
  • N2语法 时间
  • 协同过滤实现电影推荐
  • 931. 用三种不同颜色为网格涂色
  • 力扣刷题(第三十八天)
  • Rk3568驱动开发_设备树点亮LED_11
  • 系统分析师备考总结
  • SPL做量化—-VMA(变异平均线)
  • node.js配置变量
  • 内容的逐次呈现以及二分查找(算法)
  • DeepSORT中的卡尔曼滤波可观测性分析:从原理到实践
  • 提示词写的好,用VSCODE+python+Claude3.5开发edge扩展插件(2)
  • 内网映射有什么作用,如何实现内网的网络地址映射到公网连接?
  • 【东枫科技】基于Docker,Nodejs,GitSite构建一个KB站点
  • 电路中常见器件作用(二极管 三极管 MOS)
  • OpenCV (C/C++) 实现 Scharr 算子进行边缘检测
  • MySQL组合索引优化策略
  • Milvus可视化客户端Attu安装与使用指南
  • esp8266 点灯科技远程控制继电器
  • 如何解决大模型返回的JSON数据前后加上```的情况
  • 2025重庆市赛
  • [java]eclipse中windowbuilder插件在线安装
  • Python 之实用函数enumerate()详解
  • vue项目webpack、vite、rollup、parcel四种构建工具对比
  • HarmonyOS NEXT~鸿蒙操作系统功耗优化特性深度解析
  • STM32F4学习第一天——keil软件安装
  • VS Code新手基础教程