2017-03-10 8 views
1

나는이 코드를 진수하는이 64bit를 포함 바이너리 문자열로 변환하기 위해 노력하고있어 :자바에서 64 비트를 포함하는 이진 문자열을 16 진수로 변환 하시겠습니까?

String mm = "1000010111101000000100110101010000001111000010101011010000000101"; 
String v = new BigInteger(mm, 2).toString(16); 
v=String.format("%64x", v); 

를하지만 나에게이 예외 제공 :

Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.String 
    at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) 
    at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) 
    at java.util.Formatter$FormatSpecifier.print(Unknown Source) 
    at java.util.Formatter.format(Unknown Source) 
    at java.util.Formatter.format(Unknown Source) 
    at java.lang.String.format(Unknown Source) 
    at test.main(test.java:332) 

잘못 왜 점점 무엇을?

v=String.format("%64x", v); 

이것 :이

+1

16 진수 문자열보다. 'BigInteger' 생성자에서 16을 사용하는 이유는 무엇입니까? 2 일까요? –

+0

@JohnColeman 죄송합니다, 당신 말이 맞습니다. 나는이 질문을 게시 할 때 편집하고 잊어 버렸습니다. 고마워. – Sivar

+0

당신의'String.format ("% 64x", v);'인자'v'를'unsigned int'로 취급하고 그것을 16 진법으로 포맷팅하는'x'의 타입 문자를 사용합니다 - 그러나'v' 이미 String입니다. –

답변

3

변화 또한

v=String.format("%s", v); 

이 필요합니다 바이너리 문자열 라스처럼 보이는

String v = new BigInteger(mm, 2).toString(16); 
+1

솔루션을 제공해 주셔서 감사합니다. :) – Sivar

+0

이것은 '85e813540f0ab405' –

+0

@ SkaryWombat의 끝에'64x '를 추가합니다. 제안에 감사드립니다 –