>  기사  >  백엔드 개발  >  Go에서 어떻게 16진수 문자열을 IEEE-754 부동 소수점 값으로 변환할 수 있나요?

Go에서 어떻게 16진수 문자열을 IEEE-754 부동 소수점 값으로 변환할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-27 01:13:13192검색

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

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

strconv.ParseFloat 함수를 사용함에도 불구하고 16진수 문자열을 부동 소수점 값으로 변환 도전을 제기할 수 있습니다. 이 기사에서는 strconv.ParseUint 및 안전하지 않은 패키지를 사용하여 이러한 변환을 수행하는 대체 방법을 살펴봅니다.

비트 길이 설명

변환을 진행하기 전에 결정하는 것이 중요합니다. 입력 16진수 문자열의 비트 길이입니다. 질문에서 언급했듯이 제공된 16진수 표현에는 잠재적인 float32 데이터 유형을 나타내는 8자리 숫자가 있습니다. 그러나 정확성을 보장하려면 질문자와 함께 이를 명확히 하는 것이 가장 좋습니다.

strconv.ParseUint 사용

16진수 문자열에서 바이트를 구문 분석하기 위해 strconv.ParseUint는 다음을 수행할 수 있습니다. 취업하다. 그러나 메모리에서 8바이트를 차지하는 uint64를 반환하므로 float32의 4바이트 구조와 일치하도록 uint32로 변환해야 합니다.

s := "C40C5253"
n, err := strconv.ParseUint(s, 16, 32)
if err != nil {
    panic(err)
}
n2 = uint32(n)

바이트를 IEEE-754 부동으로 해석 포인트

이제 바이트가 n2에 uint32로 저장되었으므로 다음을 수행해야 합니다. IEEE-754 부동 소수점 숫자의 바이트로 해석됩니다. 안전하지 않은 패키지는 메모리 포인터에 액세스하고 조작하는 방법을 제공하여 uint32 바이트에서 float32를 생성할 수 있게 해줍니다.

f := *(*float32)(unsafe.Pointer(&n2))

math.Float32frombits를 사용하는 대체 방법

math 패키지에는 이러한 목적으로 특별히 설계된 내장 함수인 math.Float32frombits가 포함되어 있습니다. 이는 uint32 값을 float32로 직접 변환하여 보다 간단한 접근 방식을 제공합니다.

f := math.Float32frombits(n2)

출력

두 방법 중 하나를 사용하여 질문에 제공된 샘플 16진수 문자열 float32로 해석되면 -561.2863으로 변환됩니다. Go Playground에서 이 솔루션을 테스트하면 기능을 더욱 입증할 수 있습니다.

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

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