Go 언어의 encoding/binary
패키지는 이진 데이터를 인코딩하고 디코딩할 수 있는 기능을 제공합니다. 이 패키지는 다양한 인코딩 포맷을 지원하여 이진 데이터를 처리하는 데 유용합니다.
Little-Endian과 Big-Endian
encoding/binary
패키지는 작은 엔디안(little-endian)과 큰 엔디안(big-endian)을 모두 지원합니다. 빅엔디안은 데이터의 상위 바이트부터 표시되는 방식이며, 리틀엔디안은 데이터의 하위 바이트부터 표시되는 방식입니다.
예를 들어, 다음 코드로 리틀엔디안과 빅엔디안의 사용 방법을 살펴볼 수 있습니다:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
data := []byte{0x01, 0x02, 0x03, 0x04}
// 리틀 엔디안으로 uint32 값을 디코딩
num := binary.LittleEndian.Uint32(data)
fmt.Println(num)
// 빅 엔디안으로 uint32 값을 디코딩
num = binary.BigEndian.Uint32(data)
fmt.Println(num)
}
위 코드에서 encoding/binary
패키지의 LittleEndian
과 BigEndian
을 이용하여 데이터를 디코딩하는 방법을 확인할 수 있습니다.
다양한 인코딩 포맷
encoding/binary
패키지는 다음과 같은 다양한 데이터 타입에 대한 인코딩과 디코딩을 지원합니다:
uint8
,uint16
,uint32
,uint64
int8
,int16
,int32
,int64
float32
,float64
byte
,rune
예를 들어, uint16
값을 []byte
슬라이스로 변환하거나 반대로 변환하는 방법은 다음과 같습니다:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
var val uint16 = 513
buf := make([]byte, 2)
binary.LittleEndian.PutUint16(buf, val)
fmt.Println(buf)
newVal := binary.LittleEndian.Uint16(buf)
fmt.Println(newVal)
}
위 코드에서 PutUint16
과 Uint16
함수를 사용하여 uint16
값을 []byte
슬라이스로 변환하고 다시 변환하는 방법을 확인할 수 있습니다.
encoding/binary
패키지는 바이너리 데이터를 다양한 형식으로 변환하고 처리할 수 있도록 유용한 기능들을 제공합니다. 이를 활용하여 다양한 이진 데이터 처리 작업을 보다 쉽게 수행할 수 있습니다.
더 많은 자세한 내용은 공식 Go 문서 [1]에서 확인할 수 있습니다.
[1] https://pkg.go.dev/encoding/binary