- 第一章 常用基础知
对于数字以及进制来说,我们经常用到的大概也就有16进制,10进制,以及2进制和8进制的数,其中10进制是日常使用的,但在我们工作中使用到的数据来说,16进制以及2进制反而会更多一点,在后面的发送数据的过程中,基本以16进制的数据为主,当然在电梯的数据中也包括了其他的数据格式,一般的进制转换在大学的时候应该讲过,现在也只是再强调一下而已,算是重温一下大学时光哈。
步入正题,十进制数据的原理就是满十进一,再满十再进一,一个十进制的数字123=1x100+2x10+3,因为十进制的位数就叫做千位,百位,以及十位,而对于一个2进制数字来说,从低位到高位就是依次要乘以2^0, 2^1, 2^2, 2^3,等等,因此2进制就可以称之为八位,四位,二位等。
综上因此一个2进制的数字转为10进制的数字就是1011 = 1 x 2^3 + 0 x 2^2 + 1 x 2^1 + 1 x 2^0 = 8 + 0 + 2+ 1=11。
10进制转换为2进制的:就比如10进制的13,13只能达到2进制的八位,对于这种小一点的数字,就可以把它直接转换为几个2的幂次方相加,就是8 + 4 + 1(1是2的0次方),因为按照2进制的位数来写的结果就是1101。我们平常在公司所用到的数据也不会太大,基本上也可能就是100以内的部分比较多吧,对于偏大的数字,就可以采用连续除以2的过程,(商和余数是关键)举例6来说,要转换的数是6, 6 ÷ 2得到商是3,余数是0。“将商继续除以2,直到商为0……”,现在商是3,还不是0,所以继续除以2。那就是: 3 ÷ 2, 得到商是1,余数是1。“将商继续除以2,直到商为0……”现在商是1,还不是0,所以继续除以2。那就是: 1 ÷ 2, 得到商是0,余数是1,“将商继续除以2,直到商为0……最后将所有余数倒序排列”,好极!现在商已经是0。我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!因此6转换成二进制,结果是110。
在上面我们介绍完了10进制与2进制的转换,下面我们需要说说10进制与16进制之间的转换。对于10进制与16进制的转换其实与10进制与2进制的转换并没有太大的区别。对于16进制来说,16进制只有0到9这九个数字,因为16进制逢16进一,所以用A,B,C,D,E,F来表示10,11,12,13,14,15,字母并不区分大小写。
16进制转换为10进制:2AF5= 2 x 16^3 + A x 16^2 + F x 16^1 + 5 x 16^0 = 8192 + 2560 + 240 + 5 = 10997
而10进制转换为16进制:也类似于上述10进制转换为2进制一样,只不过把除数从2变为16罢了,10进制的120 转换为 16进制的就是120除以16,商7余8,7除以16,商0余7,再将余数倒序排列,就得到了16进制的数字78。
基本我们常用的进制以及转换也就这三样了,这些也基本是大学的基础知识了,写在这里也就是帮助加深一些印象。
在具体项目解析协议的时候经常会碰到数据以大端模式或者小端模式存储,所以这里简单介绍一下有关大小端的知识。
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
这里以unsigned int value = 0x12345678 为例,用unsigned char buf[4]来表示value来展示一下大端的存储模式
高地址--buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
低地址--buf[0] (0x12) -- 高位
记忆方法: 地址的增长顺序与值的增长顺序相反
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
还以0x12345678 为例,在小端模式下的存储为:
高地址--buf[3] (0x78) – 高位
buf[2] (0x56)
buf[1] (0x34)
低地址--buf[0] (0x12) – 低位
记忆方法: 地址的增长顺序与值的增长顺序相同
为了加深对大小端的理解,下面以表格1-1的形式对比一下大小端存储

本文介绍了计算机基础知识中的进制转换,包括10进制与2进制、10进制与16进制之间的转换,并提供了转换方法。此外,还简述了网络中的大小端模式以及网关的概念,强调了网关在网络通信中的作用。进制转换在实际项目如协议解析中扮演重要角色,而理解和设置正确的网关与子网掩码对于网络通信至关重要。
最低0.47元/天 解锁文章
617

被折叠的 条评论
为什么被折叠?



