转换值 - 问题

时间:2018-05-09 16:52:40

标签: javascript

我正在使用this code来表示不同基数之间的简单conversion值(baseConversion)。 但是我发现了一些我想解决的问题!

基础10到基础3

"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>

非常感谢任何帮助。提前感谢一百万!

0 个答案:

没有答案