Binary, Hex and Deci从二进制到typedArray, arrayBuffer

1,570 阅读2分钟

计算

对照表

bit和Byte 字节(Byte )+比特(bit)

bit=0/1

Byte是8位bit,如 10010110

Hex 16进制正好是代表4位bit,如1010,正好是一半的Byte,当然如果是8进制OCT,则正好是3位bit,如101。

因为需要是单数表示数值,如0-9和0-1,因此超过10需要用字母表示,即0-F。

因此:

BIN 是1位bit,如1

OCT 是3位bit,如110

HEX 是4位bit,如1010

因为一个Byte是8位bit,最大表达0-225,总共256个数字,因此,可以对每个数字对应一个符号,即编码,ASCII是如下:

因此hello转换成二进制是:

注意:表格上的数字0-9,是字符!所以对应不同的DEC。

转换工具

codebeautify.org/string-bina…

calc.50x.eu/

明白了二进制,下面说一下Unit8Array的问题:

首先从xxxArray讲起,这个其实就是Array,是一种类型,只不过前面的xxx是固定死的,限制了Array里面存储的类型,所以叫做typed array。

那么到底这个type array里面的元素类型需要是什么呢?就要看xxx,

  1. 比如Unit8Array, 表示里面的元素必须是Unit8,即8个bit,1个字节Byte的,数字,也就是说这个数字是DEC,且最大是255.

  2. 再比如Int32Array(没有Uint-unsigned)因此是signed(有+-号)的数字,32表示32bit,4byte,因此最大是:4294967295,即范围是(-2147483648 to 2147483647),也就是说每个元素的范围。

因为计算机最终是处理二进制0-1,所以我们要看看这个xxxArray是怎么存储的,比如Int32Array每个元素需要4Byte才能满足他的使用,因此需要在内存开辟4个slot,如图给她。

那么怎么初始化这个元素呢?

方法1:ArrayBuffer

  1. 先建立内存(Buffer), var buffer = new ArrayBuffer(16); 表示开辟16 Byte的内存空间。
  2. 然后在把这个内存给xxxArray: var int32View = new Int32Array(buffer); 因为每个元素需要4个Byte,因此这个变量array只能有4个元素,每个元素的范围(-2147483648 to 2147483647),现在因为刚刚初始化,所以每个元素是0,即[0,0,0,0] 如图:

方法2:直接赋值

  1. const typedArray = new Uint8Array([1, 2, 3, 4]); 表示长度为4的数组,每个元素最大是255,因为只分配了1 Byte。
  2. 如果元素超出范围怎么办,则去取模256,如图

  1. 转换为普通数组的三个方法:

es6.ruanyifeng.com/#docs/array…

最后;