以前写过...<script type="text/javascript">
//<![CDATA[ var Oct = 012765;
 
 document.write("Oct(012765): ", Oct, "<p/>");
 document.write
 (
  "fXRadixToDecimal('012765', 8, true): ",
  fXRadixToDecimal('012765', 8, true),
  "<hr/>" 
 );
 var Hex = 0x12765;
 
 document.write("Hex(0x12765): ", 0x12765, "<p/>");
 document.write
 (
  "fXRadixToDecimal('0x12765', 16, true): ",
  fXRadixToDecimal('0x12765', 16, true),
  "<hr/>" 
 );
 var Bin = 110111;
 
 document.write("Bin(110111): ", 55, "<p/>");
 document.write
 (
  "fXRadixToDecimal('110111', 2, true): ",
  fXRadixToDecimal('110111', 2, true),
  "<hr/>" 
 );
 function fXRadixToDecimal(sIpt, iRadix, bDebug)
 {// shawl.qiu code : return integer
  var Debug = bDebug;
  if(!iRadix||/^0x/i.test(sIpt))
  {
   iRadix = 16;
  }
  if(iRadix==16)
  {
   sIpt = sIpt.replace(/^0x/i, "");
  }
  var Ar = fStringToArray(sIpt);
  var iResult = iTemp = 0;
  
  Ar.reverse();
  var Len = Ar.length;
  
  while(--Len>=0)
  {
   switch(iRadix)
   {
    case 16:
     iTemp = fHexMap(Ar[Len]);
     break;
    
    default:
     iTemp = Ar[Len]-0;
     break;
   } // end switch
   
   iResult += iTemp*Math.pow(iRadix, Len);
   
   if(Debug)
    document.write
    (
     iTemp,
     " * Math.pow(",
     iRadix, 
     ", ",
     Len,
     ") = ",
     iTemp, 
     " * ", 
     Math.pow(iRadix, Len), 
     " = ", 
     iTemp*Math.pow(iRadix, Len), 
     "<br/>"
    );
  } // end while
  
  if(Debug)
   document.write("= ",iResult, "<p/>");
   
  return iResult;
  
  function fStringToArray(sIpt)
  {// shawl.qiu script
   if(!sIpt||sIpt=="") return [];
   var Ar = [];
   var Len = sIpt.length;
   while(--Len>=0)
   {
    Ar[Len] = sIpt.charAt(Len);
   }
   return Ar;
  } // function fStringToArray1(sIpt)
  
  function fHexMap(IptChar)
  {
   if(/^[a-f0-9]$/i.test(IptChar)==false)
   {
    throw new Error("输入字符("+IptChar+")不符合十六进制字符!")
   }
   
   switch(IptChar.toLowerCase())
   {
    case "a": return 10;
    case "b": return 11;
    case "c": return 12;
    case "d": return 13;
    case "e": return 14;
    case "f": return 15;
    default:
     return IptChar-0;
   }
  } // end function fHexMap
  
 } // end function fXRadixToDecimal
//]]>
</script>

解决方案 »

  1.   

    十进制转其他进制可以用
    objectname.toString([radix])radix可选项。指定将数字值转换为字符串时的进制。其他进制转换十进制可以用parseInt(numString, [radix])radix可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。进制间转换可以先转成十进制再转成其他进制
      

  2.   

    再来个 十进制 转 X 进制...<script type="text/javascript">
    //<![CDATA[
     document.write
     (
      "fDecimalToXRadix(55, 2, true): "
      ,fDecimalToXRadix(55, 2, true)
      ,"<hr/>"
     );
     
     document.write
     (
      "fDecimalToXRadix(5621, 8, true): "
      ,fDecimalToXRadix(5621, 8, true)
      ,"<hr/>"
     );
     
     document.write
     (
      "fDecimalToXRadix(75621, 16, true): "
      ,fDecimalToXRadix(75621, 16, true)
      ,"<hr/>"
     );
     function fDecimalToXRadix(iDec, iRadix, bDebug)
     {// shawl.qiu code : return string
      if(iDec===0) return 0;
      if(!iRadix||iRadix===0) iRadix = 16;
      
      iDec-=0;
      
      var NumAr = [];
      var iCount = 0;
      var Debug = bDebug;
      var iMod = 0;
      while(iDec>iRadix)
      {
       iMod = iDec%iRadix;
       NumAr[iCount++] = iMod;
       iDec = Math.floor(iDec /= iRadix);
       
       if(Debug)
       {
        document.write("iMod: ", iMod, "<br/>");
        document.write("iDec: ", iDec, "<p/>");
       }
      } // end while
      NumAr[iCount] = iDec;
      NumAr.reverse();
      
      if(Debug)
      {
       document.write("NumAr: ", NumAr, "<p/>");
      }
      
      return NumAr.join("");
     } // end function fDecimalToXRadix(iDec, iRadix, bDebug)
    //]]>
    </script>
      

  3.   

    这样试试<script>
     String.prototype.re = function(n){
    return parseInt(this, n).toString(10);
     }  var a = '1001', b = 'd';
     alert(a.re(2)); // 9
     alert(b.re(16)); // 13
    </script>
      

  4.   

    <script>
     String.prototype.re = function(n){
    return parseInt(this, n).toString(10);
     }  var a = 1001, b = 'd';
     alert(String(a).re(2));
     alert(b.re(16));
    </script>
      

  5.   

    ... 用 toString 那种方法是 JS 的内置方法, 他对我们是隐藏的...
    我想楼主是想用算法计算进制间的转换...
    应该是注重算法而不是注重结果...
      

  6.   

    var n=0xa;//16进制
    alert(n.toString());//输出10进制数10
      

  7.   

    alert(parseInt('1010','2'));//将2进制的1010转换十进制的10
    alert(parseInt('0xa','16'));//将16进制的0xa转换十进制的10
    alert(parseInt('010','8'));//将8进制的010转换十进制的8
      

  8.   

    有2个参数  一个num表示数字  一个是x表示进制 
      

  9.   

    to2<script>
    String.prototype.re = function(x){
    switch (x){
    case 2:
    var n = this.split('').reverse(), t = 0;
    for(var i = 0; i<n.length; i++){
    t += n[i]*2<<i;
    }
    return t>>1;
    break;
    case 8:
    break;
    case 16:
    break;
    }
    } var num = '101';
    alert(num.re(2)); // 5
    </script>
      

  10.   


    /*
     * 任意进制转10进制
     * 参数num表示待转换的数
     * 参数str表示待转换的进制的具体信息,如标准2进制为"01",标准8进制为"01234567"
     */
    function toDec(num, str) {
        var r = 0;
        for(var i = num.length - 1, j = 0; i >= 0; i--, j++) {
            var t = str.indexOf(num.charAt(i));
            if(t == -1) return "error";
            r += t * Math.pow(str.length, j);
        }
        return r;
    }/*
     * 10进制转任意进制
     */
    function carrybit(num, str) {
        var r = "";
        if(str.length > 1) {
            if(num >= str.length) {
                r += carrybit(Math.floor(num / str.length), str);
                r += carrybit(num % str.length, str);
            } else {
                r = str.substr(num, 1);
            }
        }
        return r;
    }