You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Buffer.from处理小于16的十进制数生成空缓冲区的解决方法

问题:Buffer.from处理小于16的十进制数时生成空缓冲区

当使用Buffer.from传入小于16的十进制数转换的十六进制字符串时,会创建空缓冲区。示例代码如下:

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 > // 期望输出为0x01?
<Buffer 02>
<Buffer 10>

可以看到,输入小于16的十进制数时,第一行代码无法生成含有效值的缓冲区,而带前导零的十六进制字符串(如"02")则能正常工作。请问如何修改第一行代码,使其可接收小于16的十进制数并生成合适的Buffer?


解决方案

方法1:补全十六进制字符串为两位长度

问题根源在于Buffer.from的hex编码要求输入字符串长度为偶数——每两个十六进制字符对应一个字节。小于16的十进制数转十六进制后是单个字符(比如1转成"1"),不符合格式要求,因此被忽略生成空缓冲区。

只需在转换后的十六进制字符串前补零,确保长度为2即可:

let num01 = Buffer.from(Number(1).toString(16).padStart(2, '0'), "hex");
console.log(num01); // <Buffer 01>

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

let num16 = Buffer.from(Number(16).toString(16).padStart(2, '0'), "hex");
console.log(num16); // <Buffer 10>

方法2:直接分配Buffer并赋值(更高效)

如果不需要字符串转换的步骤,直接创建一个长度为1的Buffer并赋值是更直接高效的方式:

let num01 = Buffer.alloc(1);
num01[0] = 1;
console.log(num01); // <Buffer 01>

这种方法跳过了字符串转换,避免了格式匹配的问题,性能更优。


内容的提问来源于stack exchange,提问作者miran80

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 01:38:16