我正在使用this code来表示不同基数之间的简单conversion
值(baseConversion)。 但是我发现了一些我想解决的问题!
"1234"
将获得"1200201"
并再次解码为基数10将再次获得"1234"
。 到目前为止一切顺利。
将"0001"
编码到基础3 将获得"1"
并再次解码将再次获得"1"
而不是"0001"
。 如何解决此问题?
function convertBase(value, from_base, to_base) {
var range = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split('');
var from_range = range.slice(0, from_base);
var to_range = range.slice(0, to_base);
var dec_value = value.split('').reverse().reduce(function(carry, digit, index) {
if (from_range.indexOf(digit) === -1) throw new Error('Invalid digit `' + digit + '` for base ' + from_base + '.');
return carry += from_range.indexOf(digit) * (Math.pow(from_base, index));
}, 0);
var new_value = '';
while (dec_value > 0) {
new_value = to_range[dec_value % to_base] + new_value;
dec_value = (dec_value - (dec_value % to_base)) / to_base;
}
return new_value || '0';
}
let raw = "1234"
document.body.innerHTML += "raw: " + raw + "<br>"
let encoded = convertBase(raw, 10, 3)
document.body.innerHTML += "encoded: " + encoded + "<br>"
let decoded = convertBase(encoded, 3, 10)
document.body.innerHTML += "decoded: " + decoded + "<br><br>"
raw = "0001"
document.body.innerHTML += "raw: " + raw + "<br>"
encoded = convertBase(raw, 10, 3)
document.body.innerHTML += "encoded: " + encoded + "<br>"
decoded = convertBase(encoded, 3, 10)
document.body.innerHTML += "decoded: " + decoded + "<br><br>"
* {
font-family: Arial;
}
i {
font-weight: bold;
color: gray;
}
<b>Note</b>: "1234" from base 10 to base 3 will get <i>"1200201"</i> and decoded again to base 10 will get <i>"1234"</i>
<br><br> Encoding "0001" to base 3 will get <i>"1"</i> and decoding again will get <i>"1"</i> instead of <i>"0001"</i> again.<br><br>
----------------
<br><br><br><br>
非常感谢任何帮助。提前感谢一百万!