Go에서 바이트를 float32 배열로 변환하는 방법은 무엇입니까?

王林
풀어 주다: 2024-02-06 08:33:08
앞으로
880명이 탐색했습니다.

Go 中如何将字节转换为 float32 数组?

질문 내용

Python 스크립트에서 Elasticache Redis 클러스터에 바이트 형식의 float32 숫자 배열을 쓴 다음 Go 스크립트를 통해 Elasticache의 바이트(문자열)를 읽고 있습니다. Go 스크립트에서 바이트를 문자열로 다시 원래 float32 배열로 변환하는 방법은 무엇입니까?

파이썬 예:

으아아아

Go(놀이터)에서 시도한 예시입니다

import numpy as np
import redis
a = np.array([1.1, 2.2, 3.3], dtype=np.float32)
a_bytes = a.tobytes(order="C") #I have also tried order="F" with no luck
print(a_bytes) #Output: b'\xcd\xcc\x8c?\xcd\xcc\x0c@33S@'
redis_client = redis.cluster.RedisCluster(host=<elasticache config endpoint>, port=6379)
redis_client.mset_nonatomic({"key1": a_bytes})
로그인 후 복사

정답


사용한 예제 코드는 "16진수 변환, 문자열로 표시"입니다. 원시 바이트(aHex:CDCC8C3FCDCC0C4033335340를 기반으로 한 것 같습니다)가 있으므로 직접 변환이 더 간단합니다. 16진수 문자열을 입력한 다음 변환을 수행하면 불필요한 작업/복잡성이 추가됩니다.

이 답변에서 우리는 다음을 얻습니다(Playground):

으아아아

업데이트된 참조 댓글:

아직도 무엇을 받으셨는지 조금 헷갈리므로 두 가지 가능성을 모두 시도해 보겠습니다.

redis 쿼리가 원시 데이터(바이트)를 go 문자열(예: "xcdxccx8c?xcdxccx0c@33S@")로 반환하는 경우 "xcdxccx8c?xcdxccx0c@33S@"),那么你可以 转换为 []byte[]byte로 변환(Playground)

으아아아

Redis가 ASCII(/UTF-8) 표현(예: CDCC = []byte{0x41, 0x44, 0x43, 0x43})이 포함된 문자열을 반환하는 경우 가장 쉬운 방법은 아마도 encoding/hex(Playground)

을 사용하여 이를 디코딩하는 것입니다. 으아아아

원래 접근 방식이 작동할 수도 있지만 위의 설명에서 지적한 대로 Endianness를 처리해야 다음이 작동합니다(playground - 더 효율적일 수 있습니다. 명확성을 위해 여기에 있습니다). :

으아아아

그러나 이는 코드를 실행하는 CPU에 대한 가정을 의미하므로 이전 답변이 바람직합니다.

위 내용은 Go에서 바이트를 float32 배열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿