2

浮動小数点値(またはメモリ内で連続するもの)の生のバイトを表示するには、非常に簡単なソリューションが必要です。私の理解では、これは型キャスト(バイト単位でのメモリ値の読み込み)と呼ばれ、キャスト(バイト単位での読み込みとそれをバイト単位で解釈する)として誤解されることはありません。浮動小数点型(float)(64)をバイト型に変換するためのpython lightweightソリューション

最も単純なテストがあると思われる。)

import numpy 
a=3.14159265 
print(a.hex()) 
# Returns 0x1.921fb53c8d4f1p+1 
b=numpy.array(a) 
print(b.tobytes()) 
# returns b'\xf1\xd4\xc8S\xfb!\[email protected]' 
# expected is something like 'F1' 'D4' 'C8' '53' 'FB' '21' '09' '40' 

が、方法六角(ヘックスにおけるIEEEフロートrepresantationの解釈を返します。 2番目の方法では、4つの16進数のマーカ\xが表示されますが、float64は8バイトを読み込む必要があります。さらに、私は他の文字で疑問に思います。
私は良い古いシンプルなCIは、floatのメモリアドレスにunsigned intポインタを使用し、そのunsigned int "Array"(ポインタ)から8個の値を出力することで実現しています。
私はC Python内で - しかし、他の簡単な解決策はありますか?
これは興味深いことかもしれません:多くの大きな浮動小数点ベクトルをBLOBにデータベースに保存するには、その機能が必要です。 可能であれば(表示可能な文字)、それは\x-formに印刷されていません。どうすれば変更できますか?

答えて

3

組み込みモジュールstructを使用することができます。あなたは、Python 3.5以降をお持ちの場合:

import struct 
struct.pack('d', a).hex() 

をそれは与える:

'f1d4c853fb210940' 

をあなたが3.5よりも古いのPythonを使用している場合:

import binascii 
binascii.hexlify(struct.pack('d', a)) 

または:

hex(struct.unpack('>Q', struct.pack('d', a))[0]) 

の場合浮動小数点数の配列を持ち、NumPyを使用したい:

import numpy as np 
np.set_printoptions(formatter={'int':hex}) 
np.array([a]).view('u8') 
関連する問題