12

ウェーブ モジュールを使用してウェーブ ファイルからサンプルを読み取りましたが、サンプルを文字列として提供します\x00

これを python 整数または numpy.int16 型に変換する最も簡単な方法は何ですか? (最終的には numpy.int16 になるので、そこに直接行っても問題ありません)。

コードは、リトル エンディアンおよびビッグ エンディアンのプロセッサで動作する必要があります。

4

4 に答える 4

20

このstructモジュールは、パックされたデータを Python の値に、またはその逆に変換します。

>>> import struct
>>> struct.unpack("<h", "\x00\x05")
(1280,)
>>> struct.unpack("<h", "\x00\x06")
(1536,)
>>> struct.unpack("<h", "\x01\x06")
(1537,)

"h" は short int、つまり 16 ビットの int を意味します。"<" はリトルエンディアンを使用することを意味します。

于 2009-11-08T21:51:28.383 に答える
12

struct1つまたは少数の2バイト文字列を整数に変換する必要がある場合は問題ありませんがarraynumpyそれ自体がより適切なオプションです。具体的には、numpy.fromstring(適切なdtype引数で呼び出される)は、バイトを文字列からの配列(それが何であれ)に直接変換できますdtype。(numpy.little_endianfalseの場合は、バイトを交換する必要があります。詳細については、ここを参照してください。ただし、基本的には、作成byteswapしたばかりの配列オブジェクトでメソッドを呼び出す必要がありますfromstring)。

于 2009-11-08T22:34:44.057 に答える
0
int(value[::-1].hex(), 16)

例:

value = b'\xfd\xff\x00\x00\x00\x00\x00\x00'
print(int(value[::-1].hex(), 16))
65533

[::-1]値を反転 (リトルエンディアン)、.hex()trabnsform を 16 進リテラルにint(,16)変換、16 進リテラルから int base16 に変換。

于 2020-11-02T00:51:21.283 に答える