十六进制和二进制数是单片机、嵌入式编程中常用到的数据形式,熟悉两种数据类型的转换很有必要。

arduino发送16进制数组(蚁哥和你一起玩ARDUINO)(1)

计算机的数字语言

十进制数我们都很熟悉,它是由0~9这十个数组合而成的。可以简单的描述十进制数为:见十进一。个、十、百、千、万等每位上最大的数值为9,最小为0。

同样可以理解十六进制数为:见十六进一。它是由0~9,a,b,c,d,e,f这16个数组合而成的。每位上最大的数值为f,最小为0。

同样,二进制数为:见二进一。它是由0和1这两个数组合而成的。

arduino发送16进制数组(蚁哥和你一起玩ARDUINO)(2)

不同进制的进位计算

我们都知道,二进制在嵌入式编程中很多情况下都是直接对应硬件管脚状态,1表示高,0表示低,在控制LED点阵或者大量继电器的的时候,如果我们一位一位进行操作,程序会写的很啰嗦,但是用十六进制来表示的话,就很简单明了了。 十六进制数通常用unsigned char (8位),unsigned short(16位)或者unsigned long(32位)这几种类型来表示 ,也就是说,1个十六进制数就可以用来描述8/16/32个二进制数,那该如何快速转换呢?

十六进制数的每一位数都可以用4位二进制数来表示,

0x0=0B0000,0x1=0B0001,0x2=0B0010,0x3=0B0011,

0x4=0B0100,0x5=0B0101,0x6=0B0110,0x7=0B0111,

0x8=0B1000,0x9=0B1001,0xA=0B1010,0xB=0B1011,

0xC=0B1100,0xD=0B1101,0xE=0B1110,0xF=0B1111

只要记住最基本的16个二进制数,在遇到十六进制数转换时,就很容易快速的实现了。

如:0xAF5B就是把A、F、5、B分别展开,对应上表,很快得出:

0xAF5B = 0B1010 1111 0101 1011 。

反过来也是一样,把二进制数从最低位(一般从最右边数)开始每4位为一组进行转换就可以了,最后不够4位的话在左侧补0即可;

如: 0B 1 1011 0110 = 0B 0001 1011 0110 =0x1B6

,