文章目录
Qt编程技巧小知识点(3)十进制与十六进制数据转化
上下位机之间数据交互常需要将上位机的十进制发送到下位机,这时候常常涉及到数据进制的转化,这里以十进制与十六进制的数据转化为例,来简要阐述一下:
- 首先,我们先来一个十进制转十六进制,需要用到两个有趣的操作符号,这里先提前说一下,
(1)& :求与操作,即:1&1=1,1&0=0,0&0=0;
(2)>>= : 右移一位且向左赋值,即:二进制的10右移一位变成01。 - 接着,来看下面的代码,我们实现这样一个转化:
十进制的 56 ,二进制为0011 1000,十六进制为38。
注意:二进制的0011对应十六进制的3,1000对应十六进制的8.
所以那,我们只要实现 十进制 变为 二进制,然后 再四位四位 的取数就可以了。 - 继续, 程序编程一下,下面是一段简要代码,风格是C++的。
int aa = 56; //十进制的
int bb[2];//十六进制的两位,高位bb[1] = 8,低位bb[0] = 3
int multipl = 1;//乘数因子
for(int ix=0;ix<2;++ix)
{
bb[ix] = 0;//初始化,挺重要的
for(int iy=0;iy<4;++iy)
{
if(aa & 1)
{
bb[ix] += multipl;//最末尾为1,就加因子
}
aa >>= 1; // 右移一位
multipl *= 2;//因子乘二
}
}
- 最后,反过来,十六级进制转为十进制,也很好理解啊,还是举一下上面的例子,十六进制的38,这样运算,3*16^1 + 8*16^0=56。
小结
实际操作过程中,进制转化用的非常多,主要是10进制与16进制之间的转化,挺有趣得,而且注意数据类型的长度,比如:C++中long long型的二进制数据长度为64,换成十六进制则会长度为16,int型的二进制数据长度为16,换成十六进制则会长度为4。
代码,还真是越写越有趣,不过,必须静下心来,防止犯一些 5s 造成的问题,却要花 1h 去找和解决。注意思路,文档开发挺不错的。另外,几个小点记录一下:
(1)循环的索引一定要好好检查,避免数组未初始化时,是否顺序给数组赋值;
(2)数据的长度和类型需要把控好,涉及多个数据类型和长度时,一定要写对应的文档记录;
(3)上位机向下位机发送数据和读取数据,一定要注意地址的设定,地址的间隔多大,地址的类型,都需要认真地核对并记录好。
这样做会省下很多的工夫与时间,可以空出手来做更多自己想做的事情。
学习,加油,共勉。