Go []byte를 Little/Big-Endian Signed Integer 또는 Float로 변환하는 방법은 무엇입니까?
바이너리 데이터를 다룰 때 이것이 중요합니다. 멀티바이트 숫자 값이 메모리에 저장되는 방식을 나타내는 엔디안의 개념을 이해합니다. Go의 바이너리 패키지는 Uint16 및 Uint32와 같은 빅엔디안과 리틀엔디안 부호 없는 정수 유형 간의 변환을 위한 편리한 기능을 제공합니다. 그러나 부호 있는 정수 및 부동 소수점 숫자에 대한 직접적인 지원은 부족합니다.
이 제한을 극복하는 열쇠는 두 단계로 작업에 접근하는 것입니다.
부호 있는 정수로 변환
예를 들어 uint16을 부호 있는 int16으로 해석하려면 동일한 메모리 레이아웃을 공유하므로 유형 변환을 사용하면 됩니다.
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
int64와 같이 더 큰 부호 있는 정수 유형에도 유사한 원칙이 적용됩니다.
부동 소수점 숫자로 변환
부호 없는 정수를 부동 소수점 유형으로 변환하는 것은 유형 변환을 통해 직접 수행할 수 없지만 Go의 수학 패키지는 이를 위해 특별히 설계된 기능을 제공합니다. 목적. 이러한 함수를 사용하면 기본 메모리 표현을 변경하지 않고 부호 없는 정수를 부동 소수점으로 또는 그 반대로 변환할 수 있습니다.
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // To convert back to unsigned integer: a3 := math.Float64bits(a2)</code>
binary.Read() 및 Write() 사용
Go의 binary.Read 및 Write 함수를 사용하면 기본 메모리 표현에 직접 액세스하여 이러한 변환을 보다 효율적으로 수행할 수 있습니다. 아래 예를 확인하세요.
<code class="go">pi := float64(3.141592653589793) buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &pi) var result float64 binary.Read(buf, binary.LittleEndian, &result) fmt.Println(result)</code>
위 내용은 Go []바이트를 Little/Big-Endian 부호 있는 정수 또는 부동 소수점 숫자로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!