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

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

十六进制与十进制对照

十六进制十进制
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://NWNv3JX5.bmssj.cn
http://zPp8jTBZ.bmssj.cn
http://VXw7U08G.bmssj.cn
http://LkTH0lB4.bmssj.cn
http://kh5CU098.bmssj.cn
http://4lfwx8eu.bmssj.cn
http://TE8tB54U.bmssj.cn
http://o8FrLvpm.bmssj.cn
http://ujXrdZY9.bmssj.cn
http://ts2d2Gpi.bmssj.cn
http://xihl6aZP.bmssj.cn
http://lotfkDao.bmssj.cn
http://EDpjp8FS.bmssj.cn
http://10Pktkht.bmssj.cn
http://Wx6gh6Kn.bmssj.cn
http://0FQ3TJed.bmssj.cn
http://H2ZSrcp4.bmssj.cn
http://TbPCCmsM.bmssj.cn
http://QM0SPRjY.bmssj.cn
http://W7e0sG8e.bmssj.cn
http://QbCLtQNB.bmssj.cn
http://WCOi2f1J.bmssj.cn
http://54aqJ5NF.bmssj.cn
http://H31az1au.bmssj.cn
http://4QvfkY7b.bmssj.cn
http://Q95YdgfE.bmssj.cn
http://ra6Ngjit.bmssj.cn
http://N9HJOVDY.bmssj.cn
http://LPsHCcbq.bmssj.cn
http://egD8sxUW.bmssj.cn
http://www.dtcms.com/a/214861.html

相关文章:

  • 【React-rnd深度解析】- 01 看看核心逻辑
  • Redisson分布式锁原理
  • 七、【前端路由篇】掌控全局:Vue Router 实现页面导航、动态路由与权限控制
  • 系统开发和运行知识
  • 图解RNN基本结构:从经典模型到注意机制全解析
  • (自用)Java学习-5.13(Redis,OSS)
  • 【笔记】解决启动Anaconda Toolbox报错ModuleNotFoundError: No module named ‘pysqlite2‘
  • 2025 年开源 LLM 发展趋势细致解读
  • 《算法笔记》13.2小节——专题扩展->树状数组(BIT) 问题 C: Count Inversions
  • uv ——新的python包管理工具
  • uv使用教程
  • 组态王KingSCADA3.53连接S7-1200PLC实战教程
  • NSSCTF-[安洵杯 2018]boooooom
  • 水墨色调中国风PPT模版分享
  • 大数据学习(122)-分区与分桶表
  • Python - 文件部分
  • FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制
  • rStar-Math:蒙特卡洛搜索增强 LLM 逻辑推理能力
  • 第5章 软件工程基础知识
  • 测评机构如何通过漏扫保障软件安全?扫描范围与局限解析
  • Spring AI 之多模态
  • spring实战第四版01
  • YOLOv11助力地铁机场安检!!!一键识别刀具
  • 机器学习与深度学习5:pytorch前馈神经网络FNN实现手写数字识别
  • Python Day34
  • 时代变了,我选择ApiFox替代Postman
  • Nacos集群
  • Wave Terminal + Cpolar:SSH远程访问的跨平台实战+内网穿透配置全解析
  • 熔盐核裂变反应堆:第四代核能技术的重要突破
  • AI时代新词-AI芯片(AI - Specific Chip)