>  기사  >  백엔드 개발  >  Go에서 16진수 문자열을 IEEE-754 부동 소수점 값으로 효율적으로 변환하려면 어떻게 해야 합니까?

Go에서 16진수 문자열을 IEEE-754 부동 소수점 값으로 효율적으로 변환하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-23 16:18:17329검색

How Can I Efficiently Convert Hex Strings to IEEE-754 Floating-Point Values in Go?

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

문제:
16진수 문자열(예: "0xC40C5253")을 다음으로 변환 IEEE-754 변환을 사용하는 부동 소수점 값은 다음과 같은 문제로 입증되었습니다. strconv.ParseFloat 함수. 대체 접근 방식이 있습니까?

답변:
16진수 문자열을 부동 소수점 값으로 효과적으로 변환하려면 다음 단계를 고려하세요.

  1. 결정 비트 길이: 입력 16진수 문자열의 비트 길이를 지정합니다(예: float32의 경우 32비트).
  2. 16진수 문자열을 UInt32로 구문 분석: strconv.ParseUint()를 사용하여 16진수 문자열을 부호 없는 32비트 정수(uint32)로 구문 분석합니다.
  3. Float32로 변환: 안전하지 않은 패키지를 활용하여 uint32를 float32 포인터로 재해석하세요.

다음은 이러한 단계를 보여주는 예제 코드 조각입니다.

import (
    "fmt"
    "strconv"
    "unsafe"
)

func main() {
    s := "C40C5253"
    n, err := strconv.ParseUint(s, 16, 32)
    if err != nil {
        panic(err)
    }
    n2 := uint32(n)
    f := *(*float32)(unsafe.Pointer(&n2))
    fmt.Println(f)
}

참고:
또는 수학 패키지는 내장된 안전하지 않은 패키지 대신 사용할 수 있는 uint32 값을 float32로 변환하는 math.Float32frombits() 함수:

f := math.Float32frombits(n2)

위 내용은 Go에서 16진수 문자열을 IEEE-754 부동 소수점 값으로 효율적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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