1

タイトルは少し誤解を招くものです。基本的に、私はいくつかの異なるフォーマットの巨大なリストにたくさんの数字を持っています. 値とその型が渡され、それらを展開して HEX 文字列に変換することが期待されます。

私の最近の試みは:

realVal = '0x%08x' %  struct.unpack( evalType, ( rawVal ) )

realVal は、数値の実際の値である 16 進数であると想定されており、後で私のコードで使用されます。evalType は数値 rawVal のコード文字タイプであり、rawVal はバイナリ ファイルから直接取り出された生の値です。evalType は、辞書を参照して取得されます。しかし、値が浮動小数点数の場合は壊れますが、最初の 100K の場合、値が整数の場合は問題ありません。

そこで、最初に次のようにして値を整数に変換しようとしました。

realVal = '0x%08x' %  int ( struct.unpack( evalType, ( rawVal ) ) )

しかし、エラーメッセージによると、明らかに struct.unpack( evalType, ( rawVal ) ) がタプルであるため、それは機能しません。

また、float から hex への変換は float.hex() で実行できることがわかったので、if ステートメントを追加して試します。

realVal = struct.unpack( evalType, ( rawVal ) ).hex()

値が浮動小数点数であることがわかっている場合、それは壊れて、タプルには .hex() 関数がないと言います。

タプルで作業していることがわかったので、内部の値が整数の場合に問題なく動作する理由と、フロートの場合にクラッシュする理由、およびそれを修正する方法を知りたいと思います。

4

2 に答える 2

1

通常、struct.unpack(..) は、フォーム (x,) で返される要素を 1 つだけ返す場合でも、タプルを返します。したがって、struct.unpack(..)[0] のようにゼロ インデックスを配置してみてください。

于 2013-08-02T19:15:24.543 に答える
0

ああ、私はそれを理解しました。

realVal = struct.unpack( "<" + evalType, ( rawVal ) )[0].hex()

それはタプルであり、最初のインデックスは私の番号が格納されている場所だからです。

于 2013-08-02T19:15:45.653 に答える