String num = "1152921504606846977";
我需要的是转换成这个01000000000000001
知道的帮帮我吧 在此先谢谢了
点点点,算了,不要用堆栈好了:
[code="java"]
// copy from java.lang.Integer.digits
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
public static String toUnsignedString(BigDecimal bigDecimal, int shift) {
BigDecimal divisor = new BigDecimal(shift);
StringBuilder builder = new StringBuilder();
do {
BigDecimal[] ba = bigDecimal.divideAndRemainder(divisor);
bigDecimal = ba[0];
builder.append(digits[ba[1].intValue()]);
} while (bigDecimal.compareTo(BigDecimal.ZERO) > 0);
return builder.reverse().toString();
}
public static void main(String[] args) {
String ns = "12345678901234567890";
BigDecimal bd = new BigDecimal(ns);
System.out.println(toUnsignedString(bd, 16));
}
[/code]
整型转换16进制字符串方法:
[code="java"]Integer.toHexString(num);[/code]
整型转换2进制字符串方法:
[code="java"]Integer。toBinaryString(num);[/code]
n进制字符串转换整形方法:
[code="java"]Integer.parseInt(numString, n);[/code]
[code="java"]
Long.toHexString(Long.valueOf("1152921504606846977"))
[/code]
20字节已经超过long类型可以接收的最大数了,虽然可以用BigDecimal接收,但好像没找到转进制的方法,楼主最好根据进制转换算法自己实现一个。
20 字节??? 是20位长度的数么?
随便弄个吧:
[code="java"]
// copy from java.lang.Integer.digits
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
public static String toUnsignedString(BigDecimal bigDecimal, int shift) {
BigDecimal divisor = new BigDecimal(shift);
Deque<Character> numberDeque = new ArrayDeque<Character>();
do {
BigDecimal[] ba = bigDecimal.divideAndRemainder(divisor);
bigDecimal = ba[0];
numberDeque.addFirst(digits[ba[1].intValue()]);
} while (bigDecimal.compareTo(BigDecimal.ZERO) > 0);
StringBuilder builder = new StringBuilder();
for (Character character : numberDeque) {
builder.append(character);
}
return builder.toString();
}
public static void main(String[] args) {
String ns = "12345678901234567890";
BigDecimal bd = new BigDecimal(ns);
System.out.println(toUnsignedString(bd, 16));
}
[/code]
[quote]那红色部分的是什么地方来的[/quote]
就是个数组双端队列,用来暂存一下转换出来每一位的字符的。
这个方法就是效率差了点,不过还可以接受……