Go []byte를 Little/Big-Endian Signed Integer 또는 Float로 어떻게 변환합니까?

DDD
풀어 주다: 2024-10-31 01:15:03
원래의
266명이 탐색했습니다.

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

Go []바이트를 Little/Big-Endian 부호 있는 정수 또는 부동 소수점으로 변환

[]바이트에 저장된 이진 데이터를 부호 있는 정수 또는 부동 소수점과 같은 숫자 유형으로 변환- 포인트 번호를 사용하려면 엔디안에 대한 이해가 필요합니다. 엔디안은 바이트가 메모리에 저장되는 순서를 정의하며, 두 가지 일반적인 형식은 리틀 엔디안(최하위 바이트 먼저)과 빅 엔디안(가장 중요한 바이트 먼저)입니다.

Go 바이너리 패키지는 다음을 제공합니다. []바이트를 부호 없는 정수로 변환하는 LittleEndian.Uint16()과 같은 함수에는 부호 있는 정수(Int16())에 직접적으로 상응하는 함수가 없습니다. 이는 엔디안이 데이터의 해석에만 영향을 미치고 메모리에서의 실제 표현에는 영향을 미치지 않기 때문입니다.

부호 없는 정수를 부호 있는 정수로 변환하려면 동일한 메모리 레이아웃을 공유하므로 간단한 유형 변환만으로 충분합니다. 예:

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>
로그인 후 복사

마찬가지로 수학 패키지 함수 Float32frombits() 및 Float64frombits()를 사용하여 부호 없는 정수를 부동 소수점 숫자로 변환할 수 있습니다.

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>
로그인 후 복사

바이너리 패키지는 내부적으로 이러한 변환을 수행할 수 있는 Read() 및 Write() 함수도 제공합니다.

<code class="go">import "bytes"

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

buf := bytes.NewReader(b)
var pi float64
err := binary.Read(buf, binary.LittleEndian, &amp;pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}
fmt.Println(pi)

// Using Read() produces the same result as using Uint64() and Float64frombits():
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)

// Output:
// 3.141592653589793
// 3.141592653589793</code>
로그인 후 복사

위 내용은 Go []byte를 Little/Big-Endian Signed Integer 또는 Float로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!