node的Buffer数据到底是几进制

clipboard.png

node是用来处理二进制数据的,但是一个字符串内容,转换为Buffer对象后,它是6e,6f这样的显示,是不是16进制?而如果把这个Buffer对象转为纯数组后,为什么又都是0-255之间数字的表示,这又是几进制?

buffer说是处理二进制,但是显示的Buffer对象是16进制,转换为数组后又是0-255数字表示,这之间是什么关系?

阅读 12.4k
4 个回答

在计算机内使用二进制表示数据,一个存储空间叫做一个 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 进制数字。

buffer是用来处理二进制内容。比较适合流式处理。

不知道lz有没有用过什么比如抓包工具,图片解码工具等等,实际上很多都是的十六进制显示,只不过相当于把二进制八个一组来显示了而已。

实际上buffer里面存的还是 0100011.... 这些,只不过每8个字节显示成一个16进制数字来给你看,所以当你真正使用的时候,需要指明特定的编解码方式(默认utf8)

另外,buffer解码结果没有什么数字,不区分数字和字符串,是一个字符一个字符组成的字符串。

底層都是二進制, 也就是說單位是bit。

但在計算機中爲了效率, 通常使用更大的單位(byte, 一般是 8個bit), 而不是 1個bit。(當然,計算機還有更大的基準單位, word。)

雖然說最小單位是bit, 但在JavaScript中, Buffer 能轉出來單位最小的也就是8個bit, 即 Uint8Array,
具體參考: Uint8Array

2^8 = 256, 範圍是 0-FF(16進制)。使用 0-255 還是 0-FF 不是關鍵問題, 關鍵問題是不管使用什麼進制, 基礎單位只有8個bit。

底层是二进制,为了显示方便用了16进制,请看下边

let a=Buffer.from([0x6e]) //16 hex
let b=Buffer.from([110]) //denary
console.log(a.equals(b)) //true
console.log(a.toString()) //n
console.log(b.toString()) //n
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏