首頁  >  問答  >  主體

javascript - js大數轉二進位

有一個超大超大的10進位數字字串,如何將其轉換成二進位字串?

由於數字特別大,沒辦法轉換成number放在變數裡toString(2)

#
仅有的幸福仅有的幸福2709 天前650

全部回覆(6)我來回復

  • 某草草

    某草草2017-05-19 10:16:41

    依照十進制轉二進制的原理,自己模擬除2取餘

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:16:41

    一種自己寫演算法 應該不會太難 另一種 交給後台處理

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:16:41

    private static String process(ArrayList<String> imp,String HexStr){
            String rem = "";
            Long remaind = (long) 0;
            ArrayList<String> newList = new ArrayList<String>();
            Iterator<String> itor =  imp.iterator();
            while(itor.hasNext()){
                String ele = itor.next();
                Long num = Long.parseLong(rem+ele);
                Long quot = num / 16;
                remaind = num%16;
                rem = remaind.toString();
                if(quot > 0){ 
                    newList.add(padString(quot.toString(),16,"0",0));
                }
            };
            String hexRem = Long.toHexString(remaind);
            if(newList.isEmpty()){
                return hexRem;
            } else{
                return process(newList,hexRem)+hexRem;
            }
            
        }
    
        public static String D2Hex(String dNum){
            String tmp = dNum;
            ArrayList<String> splitNum = new ArrayList<String>();
            while(tmp.length() > 16){
                String high = tmp.substring(0,tmp.length() - 16);
                splitNum.add(high);
                String low = tmp.substring(tmp.length() - 16);
                tmp = low;
            }
            splitNum.add(tmp);
            return process(splitNum,"");
        }
        public static String D2B(String dNum){
            String hex = D2Hex(dNum);
            StringBuilder bin= new StringBuilder();
            for(int i =0; i < hex.length(); i ++){        
                String tmp = Integer.toBinaryString( Integer.parseInt(hex.substring(i,i+1),16));
                bin.append(padString(tmp,4,"0",0));
            }
            return bin.toString();
        }
        
        
        

    超大數結果未驗證
    0------>0--->0000
    135,9234------>14bd82--->000101001011110110000010
    9999,9999,9999 -->2386f26fc0ffff--->00100011100001101111001001101111110000001111111111111111
    1,0000,11111111111111
    . 1110000110111100100110111111000001000000000000000
    9,9999,9999,9999,9999------>16345785d89ffff --->000101100011010001010111100001011101100010011111111111111111

    9999,9999,9999,99999999,08949, cef80ffffffff--->0100111011100010110101101101010000010101101110000101101011001110111110000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111 🎜

    回覆
    0
  • 怪我咯

    怪我咯2017-05-19 10:16:41

    隨便寫一張吧

    function toBin(str)
    {
      var arr = [];
      var remainder,i,str2,num,char;
      while(str.length>0) {
        str2 = "";remainder=0;
        for(i=0;i<str.length;i++) { // str2 = str组成的十进制数 / 2
          num = str.charCodeAt(i)-0x30; // num to String
          num = remainder*10 + num;
          char = Math.floor(num/2).toString();
          // 忽略最高为的0 , 即最高为如果是 0 则不放入 str2
          if(!(char === "0" && str2 === "")) { str2 += char;}
          remainder = num%2;
        }
        str = str2;
        arr.push(remainder); // 保存余数
      }
      return arr.reverse().join('');
      
    }
    console.log(toBin("3")); // 11
    console.log(toBin("9")); // 1001
    console.log(toBin("10")); // 1010
    console.log(toBin("120")); // 1111000

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:16:41

    我想問,超大,有多大

    回覆
    0
  • 为情所困

    为情所困2017-05-19 10:16:41

    如果只是顯示的話, 可以考慮讓後台轉

    回覆
    0
  • 取消回覆