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

Это пример преобразования строки в буфер и обратно в строку:

let bufferOne = Buffer.from('This is a buffer example.');
console.info(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);
let bufferOriginal = Buffer.from(JSON.parse(json).data);
console.info(bufferOriginal.toString('utf8'));
// Output: This is a buffer example.

Теперь представьте, что кто-то просто дал вам только эту строку в качестве отправной точки:
<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 buffer = '<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>'
    json = JSON.stringify(buffer);
    console.info(json);

Дает вывод:

"<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>"

Каков ваш ожидаемый результат?

kemicofa ghost 07.03.2019 11:48

вы имеете в виду конвертировать в JSON? Это уже строка?

richin 07.03.2019 11:49

Ваша буферная переменная уже является строкой!

Krishna Prashatt 07.03.2019 11:49

Я пытаюсь преобразовать это «значение строкового буфера» из буфера в строку.

Joe 07.03.2019 12:40

Добавлен пример, когда работает, и мне нужно сделать то же самое, но начиная со строки...

Joe 07.03.2019 12:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
11
5
11 247
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Для этого нет собственного способа, но я написал для вас пример метода:

function bufferFromBufferString(bufferStr) {
    return Buffer.from(
        bufferStr
            .replace(/[<>]/g, '') // remove < > symbols from str
            .split(' ') // create an array splitting it by space
            .slice(1) // remove Buffer word from an array
            .reduce((acc, val) => 
                acc.concat(parseInt(val, 16)), [])  // convert all strings of numbers to hex numbers
     )
}

результат:

const newBuffer = bufferFromBufferString('<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>')
> newBuffer
<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>
> newBuffer.toString()
'This is a buffer example.'

Автоматически преобразуется при объединении с пустой строкой:

console.info('' + bufferOne)

Это на самом деле не отвечает на вопрос. Я знаю, что это уже строка, но ему нужно сделать так, как указано в лучшем ответе (преобразование из представления, похожего на строку буфера, в строку).

Alexander Santos 31.05.2021 22:46

Лучше использовать toString

A1rPun 02.06.2021 22:44

Другой метод достижения этого:

function toBuffer(bufferString) {
  const hex = bufferString.match(/\s[0-9a-fA-F]+/g).map((x) => x.trim());
  return Buffer.from(hex.join(''), 'hex');
}

const buffer = '<Buffer 49 20 6c 6f 76 65 20 79 6f 75>';
const actualBuffer = toBuffer(buffer);

console.info(buffer); // <Buffer 49 20 6c 6f 76 65 20 79 6f 75>
console.info(actualBuffer); // <Buffer 49 20 6c 6f 76 65 20 79 6f 75>
console.info(actualBuffer === buffer); // false
console.info(actualBuffer.toString()); // Secret message

Та же функция, другой синтаксис:

const toBuffer = (bufferString) =>
  Buffer.from(
    bufferString
      .match(/\s[0-9a-fA-F]+/g)
      .map((x) => x.trim())
      .join(''),
    'hex'
  );

Другие вопросы по теме