16진수 문자열을 IEEE-754 부동 소수점 값으로 변환
16진수 문자열을 부동 소수점 값으로 변환하는 것은 어려울 수 있으며, 특히 표준 라이브러리를 사용할 경우 더욱 그렇습니다. 혼자 기능합니다. 이 기사에서는 IEEE-754 변환 표준을 기반으로 한 솔루션을 제공합니다.
시작하려면 입력의 비트 길이를 결정하는 것이 중요합니다. 이 경우 16진수 문자열의 길이는 4바이트이므로 float32 숫자를 나타낼 가능성이 높습니다.
먼저 바이트를 구문 분석합니다. 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)
16진수 문자열의 바이트가 있지만 여전히 정수로 해석됩니다. 이를 IEEE-754 float로 올바르게 해석하기 위해 안전하지 않은 패키지를 사용하여 uint32 변수에 대한 포인터를 생성하고 이를 float32로 역참조합니다.
f := *(*float32)(unsafe.Pointer(&n2))
마지막으로 결과 float32를 인쇄할 수 있습니다. 값:
fmt.Println(f)
출력 예:
-561.2863
math 패키지는 math.Float32frombits() 함수를 제공합니다. uint32에서 uint32로 직접 변환을 수행합니다. float32:
f := math.Float32frombits(n)
위 내용은 Go에서 16진수 문자열을 IEEE-754 단정밀도 부동 소수점 숫자로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!