{"id":286,"date":"2021-11-22T22:45:59","date_gmt":"2021-11-23T02:45:59","guid":{"rendered":"https:\/\/www.grumpyland.com\/blog\/?p=286"},"modified":"2021-11-22T22:46:00","modified_gmt":"2021-11-23T02:46:00","slug":"handy-base-converter-in-javascript","status":"publish","type":"post","link":"https:\/\/www.grumpyland.com\/blog\/286\/handy-base-converter-in-javascript\/","title":{"rendered":"Handy Base Converter in Javascript"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Just a simple handy javascript I <a rel=\"noreferrer noopener\" href=\"https:\/\/stackoverflow.com\/a\/55011290\/1718872\" data-type=\"URL\" data-id=\"https:\/\/stackoverflow.com\/a\/55011290\/1718872\" target=\"_blank\">found on stackoverflow<\/a> for converting any arbitrary base for any precision. Whether it be base 10 to 64, base 2, base 32, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I plan to convert it to other language(s) someday for further use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Full credits of this code to the link above. This is mostly a self note of handy things.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function convertBase(str, fromBase, toBase) {\r\n\r\n    const DIGITS = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+\/\";\r\n\r\n    const add = (x, y, base) => {\r\n        let z = &#91;];\r\n        const n = Math.max(x.length, y.length);\r\n        let carry = 0;\r\n        let i = 0;\r\n        while (i &lt; n || carry) {\r\n            const xi = i &lt; x.length ? x&#91;i] : 0;\r\n            const yi = i &lt; y.length ? y&#91;i] : 0;\r\n            const zi = carry + xi + yi;\r\n            z.push(zi % base);\r\n            carry = Math.floor(zi \/ base);\r\n            i++;\r\n        }\r\n        return z;\r\n    }\r\n\r\n    const multiplyByNumber = (num, x, base) => {\r\n        if (num &lt; 0) return null;\r\n        if (num == 0) return &#91;];\r\n\r\n        let result = &#91;];\r\n        let power = x;\r\n        while (true) {\r\n            num &amp; 1 &amp;&amp; (result = add(result, power, base));\r\n            num = num >> 1;\r\n            if (num === 0) break;\r\n            power = add(power, power, base);\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    const parseToDigitsArray = (str, base) => {\r\n        const digits = str.split('');\r\n        let arr = &#91;];\r\n        for (let i = digits.length - 1; i >= 0; i--) {\r\n            const n = DIGITS.indexOf(digits&#91;i])\r\n            if (n == -1) return null;\r\n            arr.push(n);\r\n        }\r\n        return arr;\r\n    }\r\n\r\n    const digits = parseToDigitsArray(str, fromBase);\r\n    if (digits === null) return null;\r\n\r\n    let outArray = &#91;];\r\n    let power = &#91;1];\r\n    for (let i = 0; i &lt; digits.length; i++) {\r\n        digits&#91;i] &amp;&amp; (outArray = add(outArray, multiplyByNumber(digits&#91;i], power, toBase), toBase));\r\n        power = multiplyByNumber(fromBase, power, toBase);\r\n    }\r\n\r\n    let out = '';\r\n    for (let i = outArray.length - 1; i >= 0; i--)\r\n        out += DIGITS&#91;outArray&#91;i]];\r\n\r\n    return out;\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Just a simple handy javascript I found on stackoverflow for converting any arbitrary base for any precision. Whether it be base 10 to 64, base 2, base 32, etc. I plan to convert it to other language(s) someday for further use. Full credits of this code to the link above. This is mostly a self [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_vp_format_video_url":"","_vp_image_focal_point":[],"footnotes":""},"categories":[15],"tags":[53],"class_list":["post-286","post","type-post","status-publish","format-standard","hentry","category-tutorial","tag-javascript"],"_links":{"self":[{"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/posts\/286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/comments?post=286"}],"version-history":[{"count":1,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/posts\/286\/revisions"}],"predecessor-version":[{"id":287,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/posts\/286\/revisions\/287"}],"wp:attachment":[{"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/media?parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/categories?post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.grumpyland.com\/blog\/wp-json\/wp\/v2\/tags?post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}