Maison > Questions et réponses > le corps du texte
J'ai une très grande chaîne de nombres décimaux. Comment la convertir en chaîne binaire ?
Comme le nombre est très grand, il n'y a aucun moyen de le convertir en nombre et de le mettre dans la variable toString(2)
某草草2017-05-19 10:16:41
Selon le principe de conversion décimal en binaire, simulez la division par 2 et la prise du reste
巴扎黑2017-05-19 10:16:41
Il ne devrait pas être trop difficile d'écrire l'algorithme vous-même et de le laisser en arrière-plan pour le traitement
过去多啦不再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();
}
Résultat d'un super grand nombre non vérifié
0------>0--->0000
135,9234------>14bd82--->000101001011110110000010
9999,9999,9999, 9999 ------>2386f26fc0ffff--->0010001110000110111100100110111111 0000001111111111111111
1,0000,0000,0000,0000------>2386f2 6fc10 000--->0010001110000110111100100110111111000001000000000000000
9,9999,9999, 9999,9999 ------>16345785d89ffff--->00010110001101000101011110000101110110001001111111111111111
9999,9999,9999,9999,999 9,9999,99 99,9999------>4ee2d6d415b85acef80ffffffff--->010011101110001011010110110101000001010110111000010110101100111011111000000 01111 111111111111111111111111111
怪我咯2017-05-19 10:16:41
Écrivez ce que vous voulez
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
为情所困2017-05-19 10:16:41
S'il s'agit uniquement d'un affichage, vous pouvez envisager de le transférer en arrière-plan