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
相关产品推荐
相关产品推荐

