请注意,这不是最有效的解决方案,但可行,因为您的数字不会很长(很长意味着数千个小数位)。下面的算法实现了长除法,使用字符串记录长数,然后将前一次除法的结果反复除以 16,同时将余数记录到结果中。这为您提供了问题的解决方案。
下面的代码是用 JavaScript 编写的(对不起,我在这台机器上没有 AS 编译器),但是通过添加正确的类型标签让它看起来更像 AS 一定很简单:
var source = "123487032174829820348320429437483266812812";
function longDivision(divident, quotient) {
var i, digits = [], dividentPart = 0, resultDigits = [], nextDigit;
for (i = 0; i < divident.length; i++) {
digits[i] = parseInt(divident[i], 10);
}
i = 0;
do {
dividentPart = dividentPart * 10 + digits[i];
if (dividentPart >= quotient) {
nextDigit = (dividentPart / quotient) | 0;
resultDigits.push(nextDigit);
dividentPart = dividentPart - nextDigit * quotient;
} else if (resultDigits.length) {
resultDigits.push(0);
}
i++;
} while (i < digits.length);
return { a: resultDigits.join(""), b: dividentPart };
}
function decimalToHex(input) {
var result = "", div;
do {
div = longDivision(input, 16);
result = div.b.toString(16) + result;
input = div.a;
} while (input);
if (!result) result = "0";
return "0x" + result;
}
decimalToHex(source);
// '0x16ae5514d07e120126dfbcb3073fddb2b8c'