2016-05-14 6 views
-1

私はPython(私はPython3を使用しています)とプログラミングには一般的です。パックとアンパックがPythonで回答を生成する方法の詳細な説明をしてください。私は両方の関数を使用するための構文を知っているが、私は答えが計算される方法を理解していない。またPythonのパックとアンパックのビットとバイト

[0, 0, 127, 67]

、なぜ次

L = struct.pack('f', 255) print([ii for ii in L])

次の出力(特にある理由を127と67)を生成します:次のコードは、なぜたとえば、私は理解していませんコード:

LL = struct.unpack('i', b'0000') print(LL)

はトンを生成します彼は次の番号:助けを

(808464432,)

感謝。

+1

あなたがPythonを初めて使い、完全にプログラミングするのを初めて知っていれば、 'struct'sをパッキングすることは初心者のタスクにとって痛ましい選択です。値の範囲内の各数値が3,5、または両方で割り切れるかどうかを示すプログラム(一般的に「FizzBu​​zz」として知られています)のような、より単純なものから始めてみてください。 – TigerhawkT3

答えて

3

最初のケースでは、32bit floating point numberを構成する4バイトの小数値が表示されています。

具体的な例では、浮動小数点数255.0は、メモリに4バイトと表現され、16進値は43 7f 00 00です。 little-endianプラットフォームを使用しているので、最下位バイトが最初に表示されます。そのため、バイトのリストに変換し、あなたが第2のケースで

[0, 0, 127, 67] 

を得る小数点値に変換

[ 0x00, 0x00, 0x7f, 0x43 ] 

を持って、あなたはb'0000'の結果を解釈しよう。

>>> type(b'0000') 
<class 'bytes'> 
>>> len(b'0000') 
4 

あなたが見ることができるように、この式は、4バイトのシーケンスを返すので、この場合には、文字0の4つのインスタンスのシーケンスになります。

>>> '%x' % ord('0') 
'30' 

文字0の値が16進数で0x30あります。 32ビット整数として解釈される4バイトは、0x30303030という16進値に相当します。

>>> 0x30303030 
808464432 

我々は小数で、この値を書き込むとき、私たちは808464432を得ます。

関連する問題