>  기사  >  백엔드 개발  >  Go에서 16진수 문자열을 Float32 값으로 효율적으로 변환하는 방법은 무엇입니까?

Go에서 16진수 문자열을 Float32 값으로 효율적으로 변환하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-23 19:23:13651검색

How to Efficiently Convert Hexadecimal Strings to Float32 Values in Go?

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

strconv.ParseFloat를 사용하여 16진수 문자열(예: "0xC40C5253")을 부동 소수점 값으로 변환하려고 시도하면 실패함, 대안 방법은 다음과 같습니다 탐색했습니다.

한 가지 접근 방식은 strconv.ParseUint() 함수를 활용하여 16진수 표현의 바이트를 부호 없는 32비트 정수(uint32)로 구문 분석하는 것입니다. 이는 4바이트 길이의 float 값을 나타내는 데 일반적으로 사용되는 float32에서 바이트를 그렇게 해석해야 하기 때문에 필요합니다.

안전하지 않은 패키지를 사용하면 다음을 생성하여 바이트를 float32 값으로 재해석할 수 있습니다. uint32 변수에 대한 포인터를 사용하고 이를 float32 변수에 할당합니다.

JimB가 제안한 대체 접근 방식은 수학 패키지에 내장된 함수, math.Float32frombits(). 이 함수는 부호 없는 32비트 정수를 float32 값으로 직접 변환하므로 안전하지 않은 포인터 작업이 필요하지 않습니다.

다음은 프로세스를 보여주는 업데이트된 코드 조각입니다.

package main

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

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

위 내용은 Go에서 16진수 문자열을 Float32 값으로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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