车载can报文中的数据

前言

在车载测试中如果使用canoe或者其他can工具进行发送报文经常会碰到很多二进制的数据,以及比如

0xFF,对于这样的数据如果对于二进制以及单位换算不清楚很容易云里雾里,所以简单写一篇博文记录一下

单位换算

1G=1024MB

1MB=1024KB1

1KB=1024byte

1byte2=8bit3

在我们计算机中比特作为存储的最小单元,所以平时很难遇到,计算机的底层零件用通电来表示1,断电表示0,这样子便于存储和处理数据…blabla…

进制换算

计算机中是以我们二进制进行存储数据的,但是我们也会碰到像车载发送中0xFF这样的一些数据,这个就得从我们进制换算来说起了,理解了进制换算这个问题就迎刃而解了。

我们先从我们最容易理解的十进制开始

654 这个十进制数据我们可以拆分成6*100+5*10+4*1,最后数据的真实大小就是我们的654,也就是说6的实际大小是6*10^2 ,5的实际大小为5*10^14 ,4的实际大小为4* 10^0

看到这里其实感觉好像说的是废话,但是对于我们理解其他进制是有帮助的

比如现在给一串二进制101110001,如果进行计算他的十进制数据的真实大小可以计算么,为了方便理解我们从右侧开始

1*20[^4]+1*24+1*25+1*26+1*2^8(省略了值为0的位,因为0与任何数相乘的值仍为0)=1+16+32+64+256=369

所以我们得出一个结论就是(369)10=(101110001)2,即369这个十进制数和101110001这个二进制数是完全相等的,只不过是表示的形式不用而已

这是二进制转化为十进制,那么我们十进制怎么转化为二进制呢,这里有个简便方法:

我们不难发现,二进制数左边的位的权值是右边的位的权值的两倍,而最右边的位的权值为1,所以从右往左看,各个位的权值依次为:1,2, 4, 8,16, 32, 64, 128, 256, 512…,所以当一个位的值为1时,表示这个位的值就是它的权值的大小,而当一个位为0时,表示这个位的值为0

当要把一个十进制数转化为二进制数时,我们采取的策略是把它一步一步拆分。

我们首先观察一个这个数离哪一个位的权值最近,且这个位的权值要小于这个十进制数。举个例子,有一个十进制数150,我们发现比150小的权值中128是最大的,所以权值为128的这个位的值是1,此时还剩22。我们又发现比22小的权值中16是最大的,所以权值为16的位的值是1,还剩6。我们发现比6小的权值中4是最大的,所以权值为4的位的值是1,还剩2。我们发现比2小的权值中2是最大的,所以权值为2的位的值是1,没有剩余了。没有被选中的位的值全部设为0。

所以150最终可以转换为10010110。

理解了这个我们是不是就可以进行十六进制、八进制来进行换算了呢,so easy

八进制的数字:781

如果转化为十进制:7*82+8*81+1*8^0=457

然后转化为二进制是不是也是迎刃而解了呢?那么有一个问题我们二进制一个字节八位最多表示十进制的255,那457是不是一个字节就存储不了呢,如果要转化为二进制就需要增加字节来进行表示了

-------------------------------------------------------分割线-----------------------------------------------------

那么这些问题说完我们回归到刚刚的问题上面0xFF代表什么呢?

0x代表的是16进制的数字如果是FF,就是我们二进制中的1111 1111,表示的数字也是最大的了,转化为十进制也就是255了

八进制整常数八进制整常数必须以0开头

十六进制以0x开头

十进制整常数没有前缀


  1. 其中MB我们简称为兆,类似我们平时说的网速多少兆就是这里的MB, ↩︎

  2. byte简称为字节,也可简写为B ↩︎

  3. bit就是我们计算机存储的数据,称之为比特 ↩︎

  4. 这里的100也好20也好我们把它叫做权值 ↩︎

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值