2016-08-23 22 views
1

私は一度、与えられたプログラムで次の関数を読みましたが、この関数が何のために使われているかについてはっきりしていませんか? SciPy.orgよると、dtype.newbyteorderの使用について

dtype.newbyteorder(new_order = 'S')が異なるバイトオーダーで新しいDTYPEを返し 。

どういう意味ですか?ここで

def _read32(bytestream): 
    dt = numpy.dtype(numpy.uint32).newbyteorder('>') 
    return numpy.frombuffer(bytestream.read(4), dtype=dt)[0] 
+0

"endianess"について読むと助かります:https://en.wikipedia.org/wiki/Endianness –

答えて

0

は簡単な例です:

>>> dt = np.dtype(np.uint32) 
>>> val = np.frombuffer(b'\x01\x02\x03\x04', dtype=dt) 
>>> hex(val) 
'0x4030201' 
>>> val2 = np.frombuffer(b'\x01\x02\x03\x04', dtype=dt.newbyteorder('>')) 
>>> hex(val2) 
'0x1020304' 

バイト順序は、あなたが尋ねたデータ型に(この場合は、リテラルb"..."からbytesオブジェクト)一連のバイトをパックするためにどの順序について説明し。

+0

あなたの答えをありがとう。上にリストされた関数は、画像を取得するために使用されます。イメージを読むときにバイトオーダーを制御できるように思えます。しかし、正しいバイトオーダをどのように知ることができるのでしょうか? – user288609

+0

@ user288609:画像のピクセル値はすべてバイトです(通常は)ので、バイトオーダーは心配しません(上記のコードを 'uint8'で試してみてください)。ただし、画像がBGRかRGBかを知る必要があります。それを知る唯一の方法は、それを書いたプログラムを見ていることです! – Eric

関連する問題