十六进制数如何演算为十进制数?
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>