将二进制转换为十进制的 JavaScript 程序

Posted

技术标签:

【中文标题】将二进制转换为十进制的 JavaScript 程序【英文标题】:JavaScript program to convert binary to decimal 【发布时间】:2021-12-30 11:07:00 【问题描述】:

我正在尝试制作一个能够进行十进制到二进制和二进制到十进制转换的程序。

我在处理代码的二进制到十进制部分时遇到问题。请原谅我,因为我知道编码很不完整,但我不知道哪里出错了。

目前,我在计算字段中得到部分正确的输出(例如,“(2^0) 的值中有 1”和“(2^1) 的值中有 2”)。

但是,当我输入 11 作为十进制时,计算字段会重复代码两次 (例如,“(2^0) 的值中有一个 1”,“(2^1) 的值中有一个 2”,“(2^0) 的值中有一个 1” , "(2^1) 的值中有一个 2")。

显然,每个数字应该只给出一次这些值。

另外,实际二进制数的输出字段也不正确,并且一些变量没有被使用/不需要,但我一直在尝试解决重复值的问题,然后再进行处理。

任何帮助将不胜感激!

function convertByArray(bval) 
   
    var rB = new Array();
    var outstr = "";
    var p, t, a, o;
    
    o = 0;
    for(var i=0; i<bval.length; i++) 
        var b = bval.charCodeAt(i);  
        t = 2;
        p = i;
        a = t ** p;
        
        if(a === t ** p) 
           outstr += a;
        
        var bV = b;
        $("txtCalc").value += "There is a " + a + " in the value " + "(" + t + "^" + p + ")" + "\n";
     
        o += 1;  
        b = bV;
        $("txtOut").value = outstr;
    

【问题讨论】:

你会喜欢这个的:developer.mozilla.org/en-US/docs/Web/javascript/Guide/… 注意const a = 35; console.log(a.toString(2)); 将把35 打印为二进制 【参考方案1】:

如果您通过获取长度(减一)并从当前位置减去它来访问位串的最高有效位,则可以简化您的代码。您可以像访问数组一样访问字符串字符。

var $txtCalc = $(".txtCalc");
var $txtOut = $(".txtOut");

binaryToDecimal("10010101"); // 149

function binaryToDecimal(bval) 
  var base = 2, result = 0;
  for (var pos = 0; pos < bval.length; pos++) 
    var bit = +bval[(bval.length - 1) - pos];
    if (bit === 1) 
      result += base ** pos;
    
    var message = "There is a " + bit + " in the position (" + base + "^" + pos + ")";
    $txtCalc.val($txtCalc.val() + message + "\n");
  
  $txtOut.val(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="txtOut" />
<br />
<textarea class="txtCalc" rows="10" cols="60"></textarea>

或者,您可以简单地将您的程序改为以下。在 JavaScript 中,您可以将任何基数和格式的任何数字解析为另一个基数。

var $txtOut = $(".txtOut");

binaryToDecimal("10010101"); // 149

function convertFromBaseToBase(number, fromBase, toBase) 
  return parseInt(number, fromBase).toString(toBase);


function binaryToDecimal(bval) 
  $txtOut.val(convertFromBaseToBase(bval, 2, 10));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="txtOut" />

【讨论】:

以上是关于将二进制转换为十进制的 JavaScript 程序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:需要函数将包含二进制的字符串转换为十六进制,然后再转换回二进制

使用javascript将二进制转换为文本

使用 Javascript 将十进制转换为十六进制或 Unicode

Javascript将图片字节转换为十六进制

Javascript如何将十进制数转换为具有特定小数位数的字符串

Javascript:将(十六进制)有符号整数转换为 javascript 值