NodeJS 当传入一个小于16的数字时,Buffer.from()创建一个空缓冲区

uqxowvwt  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(120)

下面的代码

let num01 = Buffer.from(Number(1).toString(16), "hex");
console.log(num01);

let num02 = Buffer.from("02", "hex");
console.log(num02);

let num16 = Buffer.from(Number(16).toString(16), "hex");
console.log(num16);

给出以下输出:

<Buffer > // how to fix this into 0x01?
<Buffer 02>
<Buffer 10>

如果我输入一个小于16的十进制数,上面代码的第一行无法创建一个包含任何值的缓冲区。如果Buffer.from("02", "hex");前面有一个0,那么它就可以正常工作。如何修改第一行,使其接受小于16的十进制数,并创建适当的缓冲区?

myzjeezk

myzjeezk1#

根据Buffer的文档,“当解码不完全由偶数个十六进制字符组成的字符串时,可能会发生数据截断。”
当创建num01时,您提供的字符串“1”没有正确的十六进制编码(没有偶数个字符),因此它被截断为空。
要将参数转换为偶数个字符,可以使用padStart method来填充零:

let num01 = Buffer.from(Number(1).toString(16).padStart(2, "0"), "hex");

或者处理任意位数的数字:

let value = Number(1).toString(16);
let num01 = Buffer.from(value.length % 2 ? "0" + value : value, "hex");

相关问题