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

Node.js中二进制字符串转十六进制后写入Buffer结果为0如何解决

问题原因

  • Node.js的Buffer每个索引位存储的是0~255范围的整数字节,不直接支持存储十六进制字符串。
  • 你代码中的hex是toString(16)生成的字符串'a8',直接赋值给buffer[i]时,Buffer会默认按十进制规则将字符串转为数值,'a8'无法解析为合法十进制数,得到NaN,Buffer会将非法值统一存储为0,这就是输出0的原因。

修复方法

赋值前把十六进制字符串转为对应数值即可,只需要修改赋值行:

// 原错误代码
// buffer[i] = hex;
// 替换为
buffer[i] = parseInt(hex, 16);

代码优化建议

你原代码中多次字符串转换的逻辑,本质是将对应字节的最高位清零,完全可以用位运算简化,不需要做冗余的类型转换,性能和可读性都更好:

function setValue(buffer, i) {
  // 0x7F 对应二进制 01111111,按位与操作可直接清零最高位,和你原有逻辑完全等价
  buffer[i] = buffer[i] & 0x7F;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:54:02