十六进制转换十进制原理介绍

十六进制转换为十进制,是先要将十六进制转换为二进制,在通过二进制转换为十进制。
十六进制转换为二进制很简单,我们首先要明白,一位十六进制代表四位二进制,如F对应二进制的1111,A代表二进制的1010,利用这种一一对应的关系,很容易就把十六进制转换为二进制,如0x1F6C,其中十六进制1对应二进制0001,十六进制F对应二进制1111,十六进制6对应二进制0110,十六进制C对应二进制1100,那么十六进制数0x1F6C对应的二进制数就是0001 1111 0110 1100。
得到对应的二进制数后,再将二进制转换为十进制,这一步就更简单了,只需要套一个公式即可,二进制右边为低位,左边为高位,最右边的第一个数代表2的0次方,自右往左依次递增,1、2、3、4…,十六位的二进制数最高位就是2的16 - 1 = 15次方(因为最低位从0开始),将二进制每一位上的数作为系数,与该位对应的次方相乘,再将所有位算得的结果相加,最后得到的数便是二进制对应的十进制数。我们拿0001 1111 0110 1100为例,公式便为f=0∗20+0∗21+1∗22+1∗23+0∗24+1∗25+1∗26+0∗27+1∗28+1∗29+1∗210+1∗211+1∗212+0∗213+0∗214+0∗215f = 0*2^0 + 0*2^1+1*2^2 + 1*2^3+0*2^4 + 1*2^5+1*2^6 + 0*2^7+1*2^8 + 1*2^9+1*2^10 + 1*2^11+1*2^12 + 0*2^13+0*2^14 + 0*2^15f=0∗20+0∗21+1∗22+1∗23+0∗24+1∗25+1∗26+0∗27+1∗28+1∗29+1∗210+1∗211+1∗212+0∗213+0∗214+0∗215最后算得f = 8044,那么8044就是二进制0001 1111 0110 1100所对应的十进制数,同样也是十六进制数0x1F6C对应的十进制数。
我们通篇以十六位的数来讲解的,其余位的数举一反三即可,原理相同。

代码实现

有了相关的知识之后,我们便可以很容易将代码实现

#include "stdio.h"
#include "math.h"
unsigned short int DecData_16[4];      //用于存储十进制数,数组的大小根据自己的实际情况进行修改
/* -------------------十六进制(十六位)转换为十进制--------------------- */
void Hex2Dec_16(unsigned short int* temp)
{for(int i = 0;i < 4;i++)    //这里是4个十六进制数,所以只循环四次,根据自己的实际情况修改{unsigned short int Hex = temp[i];unsigned short int Dec = 0;for(int j = 0;j < 16;j++)   //16表示一个十六进制数一共16位,根据自己的实际情况进行修改{if(Hex & 0x0001)   //判断十六进制数对应的二进制的最后是0还是1,所以十六进制转换为二进制这一步工作代码暗中就已经实现了{Dec += pow(2,j);    pow(2,j)是math.h头文件里的库函数,进行次方运算Hex >>= 1;   //这里的移位操作是对十六进制对应的二进制进行操作,不需要我们进行转换}else   //如果最后一位不是1{Dec += 0;   //则加0Hex >>= 1;}}DecData_16[i] = Dec;}
}

到此为止我们便实现了十六进制到十进制的转换,关于十进制转换为十六进制,请参考链接: STM32 十进制转换成十六进制的实现(有例程),在Keil5里面用C语言实现,不用scanf函数.

C语言十六进制转换成十进制(代码),可将数组内的十六进制数转换后并存入数组相关推荐

  1. 计算机13E怎么转换成十进制,十六进制换算(进制转换计算器)

    把下面的16进制转为10进制b35de1f058c72a7430241461cd504839dc27438e. 16进制转10进制16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第 ...

  2. linux c十六进制转十进制函数,用Linux/Unix命令把十六进制转换成十进制(转)

    那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...

  3. java 十六进制转十进制_「16进制转10进制」Java:十六进制转换成十进制 - seo实验室...

    16进制转10进制 问题及代码: /* *问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E. ...

  4. java中带符号十六进制转换成十进制详解

    java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...

  5. 十六进制字符串转换成十进制非负整数

    十六进制字符串转换成十进制非负整数 题目详情 输入一个以#结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出. 输入格式 ...

  6. Java:十六进制转换成十进制

    问题及代码: /* *问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. *样例输入 ...

  7. 利用Win10自带的计算器把十六进制,八进制转换成十进制

    最近在需要设置某些软件的颜色时遇到一些十六进制的颜色值,如"#C7EDCC","63B78E"等,但是在有些软件中又没有可以直接输入十六进制的选项,只有&quo ...

  8. 二进制转换为十进制c语言编程,将二进制IP地址转换成十进制(C语言程序实现)

    将二进制IP地址转换成十进制(C语言程序实现) /* * Name: IP Address * Funcion: To convert binary numbers to decimal number ...

  9. 十六进制转换成十进制函数

    {*------------------------------------------------十六进制转换成十进制函数@param@return ------------------------ ...

最新文章

  1. mysql5.0镜像_Mysql5.0学习笔记(一)
  2. 04_Nginx命令行参数,控制信号,Nginx启动、停止、重启命令
  3. 线性结构 —— 差分数组
  4. python中global的使用_PYTHON中使用GLOBAL引发的一系列问题
  5. HTML5 动态统计表
  6. [linux]redhat7.6 安装telnet
  7. nginx服务器设置url的优雅链接
  8. 大厂UI设计师vs前端工程师的沟通之道
  9. 【小程序开发】uniapp引入iconfont图标及使用方式
  10. dell5580bios恢复出厂_戴尔笔记本如何恢复Bios出厂设置?
  11. python 断言大全
  12. 利用metadata-extractor定向获取图片拍摄时间以及宽高
  13. Linux搭建Linpack环境测试GPU性能
  14. 估值择时对ETF基金定投的影响
  15. iOS开发中设置UITableView每组头试图与第一行cell之间的分割线
  16. 梯度消失和梯度爆炸问题解析
  17. 自定义Behavior的艺术探索-仿UC浏览器主页
  18. winrar CRC校验失败,文件被破坏的解决办法
  19. 计算机毕业设计JAVA汽车配件管理系统mybatis+源码+调试部署+系统+数据库+lw
  20. 因为需求理解不到位,视频自动播放列表又重写了

热门文章

  1. JS的一些面试SIX(广度和深度)
  2. 亚马逊卖家如何正确测评?
  3. 移动适配、rem以及Less
  4. 【飞桨PaddleSpeech语音技术课程】— 流式语音合成技术揭秘与实践
  5. Java调用tostring方法分析_Java对象toString()方法
  6. List Label Enterprise Reporting
  7. 设计模式之内功心法-设计原则
  8. 第8章 ——构建DVD租赁商店数据仓库
  9. Error:Error: commons-logging defines classes that conflict with classes now provided by Android. Sol
  10. python异步通信_Python:如何使这些异步方法进行通信?