특정 데이터를 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 는 숫자의 표현(진법 체계) 를 넣어서 사용하면 됩니다.
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)
[참고자료]
0 comments: