以前写过...<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>
//<![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>
解决方案 »
- JS变量的问题。
- 请问各位大哥发布信息网是用什么语言写的?
- 未结束的字符串常量js
- 请问在调试的时候提示document.forms[i].elements[j].value为空或不是对象了?
- img1.src='../picture/article/'+txt.value;的问题
- 使用"SharePoint.OpenDocuments的时候,能否禁止弹出窗口
- js鼠标经过图片放大问题
- 不能正确识别数字和字符。。。
- 100分求一个 通过鼠标拖动改变表格宽度的代码
- window中的帮助文件里的这种效果是怎样做出来的.
- embed 的疑问不知道有没有人了解这个啊!
- 如何用JS获取样式表或附加样式表文件中的数据
objectname.toString([radix])radix可选项。指定将数字值转换为字符串时的进制。其他进制转换十进制可以用parseInt(numString, [radix])radix可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。进制间转换可以先转成十进制再转成其他进制
//<![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>
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>
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>
我想楼主是想用算法计算进制间的转换...
应该是注重算法而不是注重结果...
alert(n.toString());//输出10进制数10
alert(parseInt('0xa','16'));//将16进制的0xa转换十进制的10
alert(parseInt('010','8'));//将8进制的010转换十进制的8
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进制
* 参数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;
}