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

