Go에서는 Uint16() 및 Uint32() 메서드를 사용하여 부호 없는 정수를 바이트 배열로 변환할 수 있습니다. Binary.BigEndian 및 Binary.LittleEndian 유형. 그러나 이에 상응하는 Int16() 또는 Float32() 메서드가 없다는 사실을 눈치채셨을 것입니다.
엔디안은 주어진 메모리에 바이트가 저장되는 순서를 나타냅니다. 숫자 유형. Go의 바이너리 패키지는 서로 다른 엔디안 간 변환 기능을 제공합니다.
부호 없는 정수를 부호 있는 정수로 변환하려면 간단한 유형 변환을 사용할 수 있습니다. 부호 없는 16비트 정수(uint16)와 부호 있는 16비트 정수(int16)의 메모리 레이아웃은 동일합니다. 따라서 다음 변환을 수행할 수 있습니다.
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
이 변환은 메모리 표현은 변경하지 않고 유형만 변경합니다.
변환 부동 소수점 숫자에 대한 부호 없는 정수가 약간 더 복잡합니다. Go의 수학 패키지는 math.Float32frombits() 및 math.Float64frombits()와 같이 부호 없는 정수와 부동 소수점 사이를 변환하는 함수를 제공합니다.
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a)</code>
이 변환은 메모리 값을 조작하지 않고 대신 "보기"합니다. 안전하지 않은 패키지를 사용하여 다른 유형으로.
바이너리 패키지는 이러한 작업을 수행하는 Read() 및 Write() 함수도 제공합니다. 내부적으로 전환을 확인하세요. 이러한 함수를 사용하여 다양한 숫자 유형과 바이트 배열 간을 변환할 수 있습니다.
<code class="go">var pi float64 buf := bytes.NewReader(b) err := binary.Read(buf, binary.LittleEndian, &pi) // or a := binary.LittleEndian.Uint64(b) a2 := math.Float64frombits(a)</code>
이 예에서 입력 바이트 배열에는 리틀 엔디안 형식의 pi 값이 포함되어 있습니다. Read() 함수는 바이트 배열을 float64 값으로 변환하는 반면 Uint64() 및 Float64frombits()는 수동으로 변환을 수행합니다.
위 내용은 Go에서 숫자 유형을 []byte로 변환하고 다시 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!