使用场景
在进行通信的时候,经常会遇到数据过大传输丢失的问题,因为我们的串口和网口都是按照一个字节(byte)的大小进行传输,但是如果一个数据非常大,一个字节根本不够用呢?这时我们就需要使用数据分离,将大数据分为几个字节分别进行传输, 然后在使用的时候再进行合并。
如何分离
说起如何分离数据高位和低位,我们第一想到的就是这两个符号,‘/’除法和‘%’取余,符号虽然很简单, 但是用起来经常会犯迷糊,哎,我这个时候到底是应该用除法呢,还是应该取余呢?
我会教大家一些小技巧来快速掌握这个简单的小算法。
除法‘/’的用法
在编程里面的除法‘/’和我们日常生活的除法是有区别的,例如5/2,日常生活中的除法是5/2=2.5,编程中则是5/2=2,小数点后面的所有数据都会被舍弃,可不会遵循四舍五入原则,切记。
好了,准备工作做完了,我们依旧简单点,直接先摆结论,然后再来论证,毕竟这需要一个认可的过程。
当对一个数a进行分离高低位操作的时候,将这个数a除以10,就是把这个数的10进制数进行右移1位,也就是丢掉10进制数最右边的1位数。当然,如果除以1000(10 * 10 * 10),则是把这个数的10进制数右移3位,也就是丢掉10进制数最右边的3位数。
例如12345,想要获得这个数据的‘12’两位,那么是不是应该把这个数右移三位,也就是除以1000,右边的‘345’就被丢掉了,只留下我们需要的‘12’,这是很好理解的对吧。
好,那增加一点难度,现在我有一个数,十进制是1000001,十六进制是0xF4241,如图,我想要获得0XF42,那么我应该怎么做呢?还是照着公式套除以1000吗?那肯定是不对的,很明显,我们现在是以16进制的角度来讨论数据分离了