Python スクリプトから Elasticache Redis クラスターに、次に Elasticache からバイト形式の数値の float32 配列を書き込んでいます。 Go スクリプト バイトを (文字列として) 読み取ります。 Go スクリプトで文字列としてのバイトを元の float32 配列に変換するにはどうすればよいですか?
Python の例:
リーリーこれは私が 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 進文字列に変換してから変換を行うこともできますが、不必要な作業や複雑さが追加されるだけです)。
この回答から、(プレイグラウンド):が得られます。 リーリー
更新された参考コメント:あなたが受け取ったものについてはまだ少し混乱しているので、これら 2 つの可能性を試してみましょう。
Redis クエリが生データ (バイト) を go 文字列 (つまり、
"\xcd\xcc\x8c?\xcd\xcc\x0c@33S@") として返す場合は、
を [] バイト (
Playground) に変換します
リーリー
CDCC =
[]byte{0x41, 0x44, 0x43, 0x43}) を返す場合、最後の An簡単な方法は、
encoding/hex( playground) を使用してこれをデコードすることです。
リーリー
エンディアンネス に対処する必要があります (playground - ことができます)効率の向上、私の目的は明確にするためです): リーリー
ただし、これはコードを実行する CPU についての前提を置いているため、前の回答の方が望ましいことを意味します。以上がGoでバイトをfloat32配列に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。