1. 主页
  2. 发布
  3. 短网址二维码
  4. Base64编码解码
  5. 移动版blog
Node与二进制数据
作者:晨曦沐枫|发表时间:2018-12-19 11:13:07 |分类:CSS样式

在计算机内使用二进制表示数据,一个存储空间叫做一个 bit ,只能存储 0 或是 1。 通常,计算机把 8 个bit作为一个存储的单位,称为一个 Byte。

于是一个 Byte 可以出现 256 种不同的情况。

一个 Buffer 是一段内存,比如大小为 2(Byte)的buffer,一共有 16 bit ,比如是 00000001 00100011 ,可是这样显示太不方便。所以显示这段内存的数据的时候,用其对应的 16 进制就比较方便了,是 01 23,之所以用 16 进制是因为转换比较方便。

内存仅仅存储的是二进制的数据,但是如何解释就是我们人类自己的事情了。。。。比如A 在 内存中占用两个Byte,对应的内存状态是 0000000 01000001,而uint16(JS不存在这个类型) 类型的 65 对应的存储内存的状态也是这个。

如果输出 Buffer 那么nodejs 输出的是内存实际存储的值(因为你没有给出如何解释这段内存中的数据),可是二进制显示起来不方便看,所以转换为 16 进制方便人类阅读。

如果转换为数组,那么意思就是把这个 buffer 的每一个字节解释为一个数字(其实是10进制数字,这是人类最方便的),所以是 0~255 的 10 进制数字。

底层都是二进制, 也就是说单位是bit。

但在计算机中为了效率, 通常使用更大的单位(byte, 一般是 8个bit), 而不是 1个bit。(当然,计算机有更大的基准单位, word。)

虽然说最小单位是bit, 但在JavaScript中, Buffer 能转出來单位最小的也就是8个bit, 即 Uint8Array (数组类型表示一个8位无符号整型数组),

2^8 = 256, 范围是 0-FF(16进制)。使用 0-255 还是 0-FF 不是关键问题, 关键问题是不管使用什么进制, 基础单位只有8个bit。


二进制转十进制:把二进制数按权展开、相加即得十进制数。

把二进制的10010110转换为十进制的150,案例如下:

1 0 0 1 0 1 1 0

即为(上下对应)

1*2(7) + 0*2(6) + 0*2(5) + 1*2(4) + 0*2(3) + 1*2(2) + 1*2(1) + 1*2(0) = 150

十进制转二进制: 把十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止

把十进制的150转换为二进制的10010110案例如下:

150/2 = 75 余 0

75/2 = 37  余 1

37/2 = 18  余 1

18/2 = 9   余 0

9/2 = 4    余 1

4/2 = 2    余 0

2/2 = 1    余 0 

1/2 = 0    余 1

从最后一个余数读到第一个即:10010110

二进制转八进制:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)

把二进制的10010110转换为八进制的226,案例如下:

1.先转换成3位的二进制数

10 010 110 即为:

010  010  110 

0*2(2) + 1*2(1) + 0*2(0) 0*2(2) + 1*2(1) + 0*2(0) 1*2(2) + 1*2(1) + 0*2(0) = 226


八进制转二进制:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。

把八进制的226转换为二进制的10010110,案例如下:

2 2 6

2/2 = 1 余0 2/2 = 1 余0 6/2 = 3 余0

1/2 = 0 余1 1/2 = 0 余1 3/2 = 1 余1

第一位转换得到10需要补零得到010 第一位转换得到10需要补零得到010 1/2 = 0 余1

得到110

前后拼接起来就是 010010110 去掉首位0得到 10010110


二进制转十六进制:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。

十六进制对应: 0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F

十进制对应:  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

16进制的表示法,用字母H后缀表示,比如BH就表示16进制数11;也可以用0X前缀表示,比如0X23就是16进制的23.直观表示法如图5所示

十六进制转二进制:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。





标签: Buffer Node 二进制 最后修改时间:2018-12-19 14:48:13
晨曦沐枫

魔都漂泊码农一枚,平常热衷于分享探讨一些新技术,喜欢挑战又不忘初心,所以写了这么一个站点和大家分享交流,主要分享还是前端技术为主,也有记录工作经验和生活感悟。

由于个人水平有限,所以博客中的文章难免有错误或者不正确的地方,欢迎在文章下方留言,楼主看到会及时改正。

博客是我利用空闲时间维护的一个小项目,如有异常或者报错(一般异常都hold住了,手动微笑),欢迎留言或者邮件,楼主尽早修正,楼主已推出移动版blog,欢迎使用。

联系邮箱:myco_xmy@qq.com