[kotlin] 코틀린에서의 바이트 배열 타입 변환 함수

이번 포스트에서는 코틀린에서 바이트 배열 타입을 다른 타입으로 변환하는 방법에 대해 알아보겠습니다. 바이트 배열은 네트워크 통신이나 파일 입출력 등 다양한 상황에서 사용되는 중요한 자료형입니다. 따라서 바이트 배열의 타입 변환이 필요한 경우가 많습니다.

1. 바이트 배열을 문자열로 변환하기

val byteArray = byteArrayOf(72, 101, 108, 108, 111)  // "Hello"에 해당하는 바이트 배열

val str = byteArray.toString(Charsets.UTF_8)
println(str)  // 출력: Hello

바이트 배열을 문자열로 변환하기 위해서는 toString() 함수를 사용하면 됩니다. 이때, 문자 인코딩 방식을 지정해주어야 합니다. 위의 예제에서는 Charsets.UTF_8 인코딩을 사용했습니다.

2. 문자열을 바이트 배열로 변환하기

val str = "Hello"  // 문자열 "Hello"

val byteArray = str.toByteArray(Charsets.UTF_8)
println(byteArray.contentToString())  // 출력: [72, 101, 108, 108, 111]

문자열을 바이트 배열로 변환하기 위해서는 toByteArray() 함수를 사용하면 됩니다. 마찬가지로, 인코딩 방식을 지정해주어야 합니다.

3. 바이트 배열을 정수로 변환하기

val byteArray = byteArrayOf(0x01, 0x02, 0x03, 0x04)  // [1, 2, 3, 4]에 해당하는 바이트 배열

val intValue = byteArray.foldIndexed(0) { index, acc, byte ->
    acc or (byte.toInt() shl (index * 8))
}
println(intValue)  // 출력: 16909060

바이트 배열을 정수로 변환하기 위해서는 foldIndexed() 함수를 사용하면 됩니다. 이 함수는 초기값과 함께 각 요소의 인덱스, 요소 값, 누적 값 등을 파라미터로 받습니다. 위의 예제에서는 각 바이트 값을 8비트씩 왼쪽 쉬프트 연산하여 정수로 변환한 후, 누적 값에 or 연산을 수행하여 최종 결과를 만들어냅니다.

4. 정수를 바이트 배열로 변환하기

val intValue = 16909060  // 정수 값

val byteArray = ByteArray(4)
for (i in 0 until 4) {
    byteArray[i] = (intValue shr (i * 8)).toByte()
}
println(byteArray.contentToString())  // 출력: [1, 2, 3, 4]

정수를 바이트 배열로 변환하기 위해서는 비트 연산을 사용해야 합니다. 위의 예제에서는 해당 정수 값을 8비트씩 오른쪽 쉬프트 연산하여 각 바이트 값을 구하고, toByte() 함수를 사용하여 정수 값을 바이트로 변환한 후, 바이트 배열에 저장합니다.

참고 자료