Как преобразовать буфер в массив в Nodejs?

#node.js

#node.js

Вопрос:

Как преобразовать буфер в массив?

Буфер (шестнадцатеричные значения):

 myBuffer = <Buffer 48 65 6c 6c 6F >
  

Я хочу массив переменного типа, подобный этому:

 myArray = [48, 65, 6c, 6c, 6F] // Hex values
  or  
myArray = [72, 101, 108, 108, 111] // Decimal values
  

ВАЖНО: я не хочу использовать for цикл для перемещения буфера от байта к байту. Я хочу знать, существует ли собственный способ преобразования буфера в массив.

Комментарии:

1. <Buffer 48 65 6c 6c 6F > это строка или тег. И какова взаимосвязь между [48, 65, 6c, 6c, 6F] or like this [72, 101, 108, 108, 111] этими массивами? .В html <Buffer 48 65 6c 6c 6F > недопустимый

2. @prasanth кажется, что первый массив представлен в шестнадцатеричном формате, а второй массив — это шестнадцатеричные значения в десятичном формате. Я думаю, что они ссылаются на объекты буфера в Node, а не на строки / теги.

3. @prasanth OP говорит о ArrayBuffer: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…

4. @prasanth Вероятно, это потому, что OP не знает, как это записать, или, может быть, я действительно ошибаюсь, и это совершенно другое дело… в любом случае, лучший способ действий здесь — проголосовать за закрытие, поскольку «неясно, о чем вы спрашиваете» .

5. @wBB As Buffer не является актуальной вещью в native JavaScript. Вы могли бы либо ссылаться на ArrayBuffer , либо Node.js Buffer . Хотя формат <Buffer 48 65 6c 6c 6f> выглядит как Node.js Buffer в консоли. войдите в меня, так что, я полагаю, вы имеете в виду Node.js Buffer .

Ответ №1:

Похоже, вы имеете в виду Node.js Буфер. Если это так, вы можете просто сделать это:

 var buf = new Buffer([72,101,108,108,111]) //<Buffer 48 65 6c 6c 6f>
var arr = Array.prototype.slice.call(buf) //[72,101,108,108,111]
  

Ответ №2:

Если вы говорите о arraybuffer, попробуйте этот метод:

 function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
  

Если вы говорите о буферном объекте nodejs, попробуйте это:

 let bufferOne = Buffer.from('This is a buffer example.');
console.log(bufferOne);

// Output: <Buffer 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e>

let json = JSON.stringify(bufferOne);
console.log(json);

// Output: {"type":"Buffer","data":   [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
json = JSON.parse(json);
json.data.forEach(e=> console.log(e.toString(16))); 
// Output: 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e
  

Ответ №3:

В ES6 это также сработало бы:

 const buffer = new Buffer([72,101,108,108,111])
const arr = [...buffer] //[72,101,108,108,111]