これは最も効率的な解決策ではありませんが、数字がそれほど長くないことを考えると実行可能です (非常に長いと小数点以下の桁数が数千になることを意味します)。以下のアルゴリズムは、文字列を使用して長い除算を実装して長い数値を記録し、前の除算の結果を 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'