특정 데이터를 2진수, 10진수, 16진수로 확인하고 싶은 경우가 꽤 많았습니다. 최근에 2진수를 다루는 과정에서 큰 값이 들어가면서 발생하는 오류를 겪었습니다. 이런저런 검색 중에  BigInteger 에 대해서 알게되었는데, 큰 값에 대한 걱정...

[안드로이드] byteArray, 2진수, 10진수, 16진수 간단 변환 (with BigInteger)

 

특정 데이터를 2진수, 10진수, 16진수로 확인하고 싶은 경우가 꽤 많았습니다.

최근에 2진수를 다루는 과정에서 큰 값이 들어가면서 발생하는 오류를 겪었습니다.

이런저런 검색 중에  BigInteger 에 대해서 알게되었는데,

큰 값에 대한 걱정 없이 쉽게 2진수, 10진수, 16진수 변환이 가능하여 아래와 같이 정리합니다.

 

 

 

 

1. BigInteger

여러 데이터 타입 (int, float, long, double) 은 각각의 허용 범위를 가집니다.

BigInteger 는 이러한 허용 범위와 상관없이 큰 값을 취할 수 있습니다. 

또한 해당 데이터의 진법변환이 비교적 쉽다는 장점을 가집니다.

 

 

2. BigInteger toString(int radix)

byteArray, 2진수, 10진수, 16진수 를 쉽게 변환하기 위해서 BigInteger 의 toString 을 사용했습니다.

toString 의 인수 radix 는 숫자의 표현(진법 체계) 를 넣어서 사용하면 됩니다.

(인수를 넣지 않으면 default 10 으로 취급합니다.)


byteArray -> 2진수, 10진수, 16진수

val binaryString = BigInteger(byteArray).toString(2) // byteArray -> 2진수
val decimalString = BigInteger(byteArray).toString(10) // byteArray -> 10진수
val hexString = BigInteger(byteArray).toString(16) // byteArray -> 16진수

 

2진수, 10진수, 16진수 -> byteArray

val byteArray2 = BigInteger(binaryString, 2).toByteArray() // 2진수 -> byteArray
val byteArray10 = BigInteger(decimalString, 10).toByteArray() // 10진수 -> byteArray
val byteArray16 = BigInteger(hexString, 16).toByteArray() // 16진수 -> byteArray

2진수 -> 10진수, 16진수

val decimalString = BigInteger(binaryString, 2).toString(10) // 2진수 -> 10진수
val hexString = BigInteger(binaryString, 2).toString(16) // 2진수 -> 16진수


10진수 -> 2진수, 16진수

val binaryString = BigInteger(decimalString, 10).toString(2) // 10진수 -> 2진수
val hexString = BigInteger(decimalString, 10).toString(16) // 10진수 -> 16진수


16진수 -> 2진수, 10진수

val binaryString = BigInteger(decimalString, 16).toString(2) // 16진수 -> 2진수
val decimalString = BigInteger(decimalString, 16).toString(10) // 16진수 -> 10진수

 

 

 

[Related post]

[안드로이드] 비트변경 예제 : set bit 1 or 0 (with BigInteger)

 

[참고자료]

Android developers

 

 

 

 

0 comments: