node是用来处理二进制数据的,但是一个字符串内容,转换为Buffer对象后,它是6e,6f这样的显示,是不是16进制?而如果把这个Buffer对象转为纯数组后,为什么又都是0-255之间数字的表示,这又是几进制?
buffer说是处理二进制,但是显示的Buffer对象是16进制,转换为数组后又是0-255数字表示,这之间是什么关系?
node是用来处理二进制数据的,但是一个字符串内容,转换为Buffer对象后,它是6e,6f这样的显示,是不是16进制?而如果把这个Buffer对象转为纯数组后,为什么又都是0-255之间数字的表示,这又是几进制?
buffer说是处理二进制,但是显示的Buffer对象是16进制,转换为数组后又是0-255数字表示,这之间是什么关系?
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
2 回答4.1k 阅读✓ 已解决
3 回答7.9k 阅读
1 回答4.5k 阅读✓ 已解决
2 回答5.6k 阅读
2 回答1.7k 阅读✓ 已解决
4 回答847 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
在计算机内使用二进制表示数据,一个存储空间叫做一个 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 进制数字。