Nodejs怎么样手动生成Buffer

Nodejs怎么样手动生成Buffer

程序输出是 <Buffer 81 93 87 f3 8f dd fc d1 e2 b8 f4 80 ee ba e2 d1 b5 ff ef 96 e3 b1 e8 d1 f2> 这样的字节流, 我要把这种字节流 发到另一个程序里去, 怎么在程序中手动生成这种一样的buffer 用 ‘\u0081\u0093\u0087…’ 这样貌似不正确

5 回复

要生成一个特定的 Buffer 对象,你需要使用 Node.js 中的 Buffer API。你提到的 <Buffer 81 93 87 f3 8f dd fc d1 e2 b8 f4 80 ee ba e2 d1 b5 ff ef 96 e3 b1 e8 d1 f2> 是一个包含多个十六进制值的字节流。为了生成这样一个 Buffer,你可以直接将这些十六进制值传递给 Buffer.from() 方法。

示例代码

// 定义十六进制值数组
const hexValues = [
    0x81, 0x93, 0x87, 0xf3, 0x8f, 0xdd, 0xfc, 0xd1,
    0xe2, 0xb8, 0xf4, 0x80, 0xee, 0xba, 0xe2, 0xd1,
    0xb5, 0xff, 0xef, 0x96, 0xe3, 0xb1, 0xe8, 0xd1,
    0xf2
];

// 使用 Buffer.from() 方法生成 Buffer
const buffer = Buffer.from(hexValues);

console.log(buffer);

解释

  1. 定义十六进制值数组

    • hexValues 数组包含了你要生成的 Buffer 的所有十六进制值。
  2. 使用 Buffer.from() 方法

    • Buffer.from() 方法接受一个数组或字符串,并将其转换为 Buffer 对象。
    • 在这里,我们传递了一个包含十六进制值的数组。
  3. 打印结果

    • 打印出的 buffer 将会是一个包含指定十六进制值的 Buffer 对象。

这种方法可以确保生成的 Buffer 恰好是你需要的字节流,而不会涉及到任何可能引起编码问题的字符转义序列(如 \u0081)。

注意事项

  • 确保你传递给 Buffer.from() 的数组中的每个元素都是有效的字节(即 0 到 255 之间的整数)。
  • 如果你有十六进制字符串,例如 "819387f38fddfc"d1e2b8f480eebae2d1b5ffef96e3b1e8d1f2",你需要先将其转换为字节数组,然后再使用 Buffer.from() 方法。

希望这能帮助你生成所需的 Buffer 对象!


字符串转buffer var buf = new Buffer(‘xxxxxxxxxx’)

buffer转字符串 var xx = “” + buf; 按照编码转 buf.toString(‘utf8’)

buffer数组转buffer var buf = Buffer.concat( [ new Buffer(‘xx’), new Buffer(‘xx2’) ] )

var buf = new Buffer([0x81, 0x93, 0x87, 0xf3, …]); //

这个是对的,另外问一下字节发到浏览器客户端是显示是 Blob 客户端js能处理这种字节流吗?

要生成与示例 <Buffer 81 93 87 f3 8f dd fc d1 e2 b8 f4 80 ee ba e2 d1 b5 ff ef 96 e3 b1 e8 d1 f2> 相同的 Buffer 对象,可以使用 Node.js 的 Buffer API 来手动创建。

以下是具体的步骤和示例代码:

步骤

  1. 了解 Buffer 数据:首先,你需要明确知道每个字节的值。
  2. 创建 Buffer:使用这些字节值来创建一个 Buffer 对象。

示例代码

const bufferValues = [0x81, 0x93, 0x87, 0xf3, 0x8f, 0xdd, 0xfc, 0xd1, 0xe2, 0xb8, 0xf4, 0x80, 0xee, 0xba, 0xe2, 0xd1, 0xb5, 0xff, 0xef, 0x96, 0xe3, 0xb1, 0xe8, 0xd1, 0xf2];

// 创建 Buffer
const myBuffer = Buffer.from(bufferValues);

console.log(myBuffer);

解释

  • bufferValues 是一个包含字节值的数组。每个值都是十六进制表示的整数。
  • Buffer.from(bufferValues) 使用这些整数值创建一个新的 Buffer 对象。
  • 最终输出的 Buffer 与题目中的示例一致。

注意事项

  • 确保所有字节值都在 0x000xFF 范围内。
  • 使用 Buffer.from() 方法比直接使用 \uXXXX 更为高效和准确,因为 \uXXXX 表示的是 Unicode 字符而不是字节值。

通过这种方式,你可以轻松地生成特定的 Buffer 数据并将其发送到其他程序。

回到顶部