JavaScript - 如何将缓冲区转换为字符串?

14

这是将字符串转换为缓冲区,然后再转回字符串的示例:

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);
let bufferOriginal = Buffer.from(JSON.parse(json).data);
console.log(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>
- 你将如何将它转换为 'buffer' 字符串的常规值?

我尝试过:

   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.log(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
你的意思是转换成JSON格式吗?它已经是一个字符串了吗? - richin
1
您的缓冲变量已经是一个字符串了! - Krishna Prashatt
我正在尝试将“字符串缓冲区值”从缓冲区转换为字符串。 - Joe
添加了一个示例,当它工作时,我需要做相同的事情,但是从一个字符串开始... - Joe
4个回答

8

当与空字符串连接时,会自动转换:

console.log('' + bufferOne)

1
这并没有真正回答问题。我知道它已经是字符串,但他需要按照最佳答案所述进行操作(从缓冲区-类似字符串的表示形式转换为字符串)。 - Alexander Santos
2
更好的做法是使用 toString - A1rPun

7

没有本地的方法可以实现这个,但是我为你编写了一个示例方法:

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.'

0

另一种实现这个的方法:

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.log(buffer); // <Buffer 49 20 6c 6f 76 65 20 79 6f 75>
console.log(actualBuffer); // <Buffer 49 20 6c 6f 76 65 20 79 6f 75>
console.log(actualBuffer === buffer); // false
console.log(actualBuffer.toString()); // Secret message

同一功能,不同语法:

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

0
你不能制作一个缓冲模板,但是如果你从某个地方获取了数字,可以立即给出一个数组。
至少这样做会更加困难。
const ListToBuffer = (list) => Buffer.from(list.join(''), 'hex');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接