>백엔드 개발 >Golang >Go에서 16진수 문자열을 IEEE-754 단정밀도 부동 소수점 숫자로 어떻게 변환합니까?

Go에서 16진수 문자열을 IEEE-754 단정밀도 부동 소수점 숫자로 어떻게 변환합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-27 03:03:10270검색

How Do I Convert a Hex String to an IEEE-754 Single-Precision Floating-Point Number in Go?

16진수 문자열을 IEEE-754 부동 소수점 값으로 변환

16진수 문자열을 부동 소수점 값으로 변환하는 것은 어려울 수 있으며, 특히 표준 라이브러리를 사용할 경우 더욱 그렇습니다. 혼자 기능합니다. 이 기사에서는 IEEE-754 변환 표준을 기반으로 한 솔루션을 제공합니다.

시작하려면 입력의 비트 길이를 결정하는 것이 중요합니다. 이 경우 16진수 문자열의 길이는 4바이트이므로 float32 숫자를 나타낼 가능성이 높습니다.

  1. 16진수 표현에서 바이트 구문 분석

먼저 바이트를 구문 분석합니다. strconv.ParseUint() 함수를 사용하여 16진수 표현을 부호 없는 32비트 정수(uint32)로 변환합니다. 이 함수는 uint64를 반환하므로 float32의 크기와 일치하도록 uint32로 변환해야 합니다.

s := "C40C5253"
n, err := strconv.ParseUint(s, 16, 32)
if err != nil {
    panic(err)
}
n2 := uint32(n)
  1. 바이트를 IEEE-754 Float로 해석

16진수 문자열의 바이트가 있지만 여전히 정수로 해석됩니다. 이를 IEEE-754 float로 올바르게 해석하기 위해 안전하지 않은 패키지를 사용하여 uint32 변수에 대한 포인터를 생성하고 이를 float32로 역참조합니다.

f := *(*float32)(unsafe.Pointer(&n2))
  1. 결과 인쇄

마지막으로 결과 float32를 인쇄할 수 있습니다. 값:

fmt.Println(f)

출력 예:

-561.2863
  1. 대체 방법

math 패키지는 math.Float32frombits() 함수를 제공합니다. uint32에서 uint32로 직접 변환을 수행합니다. float32:

f := math.Float32frombits(n)

위 내용은 Go에서 16진수 문자열을 IEEE-754 단정밀도 부동 소수점 숫자로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.