node.JS二进制操作模块buffer对象使用方法详解

2020-06-17 08:01:05易采站长站整理

‘binary’ – ‘latin1’ 的别名。

‘hex’ – 将每个字节编码为两个十六进制字符。

Buffer.from(string[, encoding])

在新版本中,由Buffer.from(string[, encoding]方法替代


var buf1 = Buffer.from('this is a tést');
console.log(buf1.toString());//this is a tést
console.log(buf1.toString('ascii'));//this is a tC)st
var buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf2.toString());//this is a tést

4、new Buffer(arrayBuffer[, byteOffset [, length]])。参数arrayBuffer <ArrayBuffer> 一个 ArrayBuffer,或一个 TypedArray 的 .buffer 属性;byteOffset <Integer> 开始拷贝的索引。默认为 0;length <Integer> 拷贝的字节数。默认为 arrayBuffer.length – byteOffset


var arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
var buf = new Buffer(arr.buffer);
console.log(buf);//<Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf);//<Buffer 88 13 70 17>

Buffer.from(arrayBuffer[, byteOffset [, length]])

在新版本中,由Buffer.from(arrayBuffer[, byteOffset [, length]])方法替代


var arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
var buf = Buffer.from(arr.buffer);
console.log(buf);//<Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf);//<Buffer 88 13 70 17>

 

Buffer对象类似于数组,它的元素为16进制的两位数,即0到255的数值


console.log(Buffer.from('test'));//<Buffer 74 65 73 74>

长度

不同编码的字符串占用的元素个数各不相同,中文字在UTF-8编码下占用3个元素,字母和半角标点符号占用1个元素


var buf = Buffer.from('match');

console.log(buf.length);//5

var buf = Buffer.from('火柴');

console.log(buf.length);//6

下标

Buffer受Array类型的影响很大,可以访问length属性得到长度,也可以通过下标访问元素


var buf = Buffer.alloc(10);

console.log(buf.length); // => 10

上述代码分配了一个长10字节的Buffer对象。我们可以通过下标对它进行赋值


buf[0] = 100;

console.log(buf[0]); // => 100

要注意的是,给元素的赋值如果小于0,就将该值逐次加256,直到得到一个0到255之间的整数。如果得到的数值大于255,就逐次减256,直到得到0~255区间内的数值。如果是小数,舍弃小数部分,只保留整数部分


buf[0] = -100;