1

こんにちは私はLinuxで-0.000000e+00の解析に問題があります(Windowsでは動作しています)。

struct.pack( "d", -0.000000e+00 )

Linuxのstruct.packで、-0.000000e+00を0.000000e+00に変更します。パック前の値を出力した場合、struct.packの結果は0.000000e+00のようになります。

この問題を解決するための解決策はありますか?

私は負の数を追加する必要があると思います魔女は0に最も近いです。それを行う方法は?

結果の編集 struct.pack( "d", -0.000000e+00 )'\x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x80'

struct.pack( "!d", -0.000000e+00 )結果'\x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'

struct.pack( "<d", -0.000000e+00 )結果'\x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'

struct.pack( ">d", -0.000000e+00 )結果'\x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00\x00'「<d」と「>d」を使用したい。

EDITエラーではありません。

4

1 に答える 1

1

struct format文字列"d"は、プラットフォーム固有の方法で値をエンコードします。ほとんどの場合、バイト文字列をデコードするプラットフォームのエンディアンまたは倍長が異なります。フォーマット文字を使用して!、プラットフォームに依存しないエンコーディングを強制します。

>>> struct.pack('!d', -0.)
b'\x80\x00\x00\x00\x00\x00\x00\x00' # IEEE754 binary64 Big Endian
>>> struct.unpack('!d', b'\x80\x00\x00\x00\x00\x00\x00\x00')[0]
-0.0

また、サポートされているPythonバージョンを使用していることを確認してください。cPython <2.5では、構造体にバグがあることが知られています。2.7や3.2などの現在のバージョンに更新します。

于 2012-07-31T08:41:40.397 に答える