[go] encoding/binary 패키지에서 제공하는 다양한 인코딩 포맷들

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 패키지의 LittleEndianBigEndian을 이용하여 데이터를 디코딩하는 방법을 확인할 수 있습니다.

다양한 인코딩 포맷

encoding/binary 패키지는 다음과 같은 다양한 데이터 타입에 대한 인코딩과 디코딩을 지원합니다:

예를 들어, 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)
}

위 코드에서 PutUint16Uint16 함수를 사용하여 uint16 값을 []byte 슬라이스로 변환하고 다시 변환하는 방법을 확인할 수 있습니다.

encoding/binary 패키지는 바이너리 데이터를 다양한 형식으로 변환하고 처리할 수 있도록 유용한 기능들을 제공합니다. 이를 활용하여 다양한 이진 데이터 처리 작업을 보다 쉽게 수행할 수 있습니다.

더 많은 자세한 내용은 공식 Go 문서 [1]에서 확인할 수 있습니다.

[1] https://pkg.go.dev/encoding/binary