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

JavaScript二进制转十进制异常:01101110转得110而非预期118?

问题分析与解决

你的问题核心是布尔数组的位序和parseInt解析二进制字符串的位序不匹配:

  • 从十进制118转换得到的布尔数组[false, true, true, false, true, true, true, false]中,数组第0位对应二进制的最低位(2⁰),第7位对应最高位(2⁷)。
  • 但你直接将数组转成字符串01101110后,parseInt会把字符串最左边的字符当作最高位(2⁷),最右边当作最低位(2⁰),自然得到错误结果110。

解决方法

方法1:反转数组后生成二进制字符串

在生成二进制字符串前,先反转binObj数组,让位序匹配parseInt的解析逻辑:

const binObj = [];
OutObj.map((obj) => {
  const boolToInt = obj.isActive ? 1 : 0;
  binObj.push(boolToInt);
});
// 反转数组后再转字符串
const binary = binObj.reverse().toString().replaceAll(',', ''); // => "01110110"
const decimal = parseInt(binary, 2); // 得到118

方法2:直接遍历数组计算十进制值(更高效)

跳过字符串转换步骤,直接根据数组索引的位权重计算结果,彻底避免位序问题:

let decimal = 0;
OutObj.forEach((obj, index) => {
  if (obj.isActive) {
    // 位运算比Math.pow性能更优
    decimal |= (1 << index);
  }
});
// decimal最终为118

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:25:26