十六进制数如何演算为十进制数?

btbtd 2007-07-29 05:39:04

关键是我想知道演算的步骤, 结果当然很容易知道...

下面 十六进制不带 a-f 可以正确演算, 反之演算错误...
如何修正?



<script type="text/javascript">
//<![CDATA[

var Hex = 0xff00;
document.write("Hex(0xff00): ", Hex, "<p/>");

document.write("fHexToDec('0xff00'): ", fHexToDec('0xff00'), "<p/>");
document.write("fHexToDec('12765'): ", fHexToDec('12765'), "<p/>");

function fHexToDec(sIpt)
{
var Debug = true;
sIpt = sIpt.replace(/^0x/i, "");
var Ar = fStringToArray(sIpt);
var Len = Ar.length;
Ar.reverse();
var Result = 0;
var iTemp = 0;
while(--Len>=0)
{
iTemp = fHexMap(Ar[Len]);
//alert(iTemp);
Result += iTemp*Math.pow(16, Len);
if(Debug)
document.write(iTemp, "*", Math.pow(16, Len), "=", iTemp*Math.pow(16, Len), "<br/>");
}
if(Debug)
document.write(Result, "<br/>");
return Result;
}

function fHexMap(IptChar)
{
if(/^[a-f0-9]$/i.test(IptChar)==false)
{
throw new Error("输入字符("+IptChar+")不符合十六进制字符!")
}

switch(IptChar.toLowerCase())
{
case "a": return 11;
case "b": return 12;
case "c": return 13;
case "d": return 14;
case "e": return 15;
case "f": return 16;
default:
return IptChar-0;
}
}


function fStringToArray(sInput)
{// shawl.qiu script
var arCell = [];
var iCount = 0;
var iLen = sInput.length;
while(iCount<iLen)
{
arCell[iCount] = sInput.charAt(iCount);
iCount++;
}
return arCell;
} // end function fStringToArray
//]]>
</script>
...全文
266 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
btbtd 2007-07-30
  • 打赏
  • 举报
回复
呵呵, 那我再来个 十进制转 x 制....
如果我心血来潮, 大概会弄个 x 制 转 y 制...

<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;
iDec-=0;
if(iDec===0) return 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();
return NumAr.join("");

if(Debug)
{
document.write("NumAr: ", NumAr, "<p/>");
}
} // end function fDecimalToXRadix(iDec, iRadix, bDebug)
//]]>
</script>

btbtd 2007-07-30
  • 打赏
  • 举报
回复
最后一个貌似于 huffman 最优二叉数的权值....
btbtd 2007-07-30
  • 打赏
  • 举报
回复
....楼上有人看错题...
二进制的天书还看得懂点, 用个函数难得了我呀...
上面弄的是如何以公式化演算进制的转换....
gzdiablo 2007-07-30
  • 打赏
  • 举报
回复
10进制转X进制还用写啊? 直接 Number.toString(number,x)不就可以了
muxrwc 2007-07-30
  • 打赏
  • 举报
回复
晕,看错。。
muxrwc 2007-07-30
  • 打赏
  • 举报
回复
<script type="text/javascript">
alert(parseInt("FF", 16));
</script>
梅雪香 2007-07-29
  • 打赏
  • 举报
回复
//hexstr: 0x(([1-9a-f][0-9a-f]+)|(0))合法的16进制字符串
function hex2dec(hexstr){
var o = {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,b:11,c:12,d:13,e:14,f:15};
var ar = hexstr.replace(/^0x/,"").split("").reverse();
var sum = 0;
for(var i=0,l=ar.length;i<l;i++)
sum += o[ar[i]] * Math.pow(16,i);
return sum;
}

document.write(hex2dec("0x1320123af"),"<br>");
document.write(Number("0x1320123af"),"<br>");
btbtd 2007-07-29
  • 打赏
  • 举报
回复
唉, 问题已解决多时, 咱也不卖关子了....

<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),
"<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>
btbtd 2007-07-29
  • 打赏
  • 举报
回复
...................没人知道么....其实......
btbtd 2007-07-29
  • 打赏
  • 举报
回复
:O
说了不是要结果, 而是如何演算到正确的结果...
就比如你知道 16 的平方根是 4 吧, 那是如何计算出来的?
梅雪香 2007-07-29
  • 打赏
  • 举报
回复
document.write(Number("0x123"));

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧