ウェーブ モジュールを使用してウェーブ ファイルからサンプルを読み取りましたが、サンプルを文字列として提供します\x00
。
これを python 整数または numpy.int16 型に変換する最も簡単な方法は何ですか? (最終的には numpy.int16 になるので、そこに直接行っても問題ありません)。
コードは、リトル エンディアンおよびビッグ エンディアンのプロセッサで動作する必要があります。
この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 を意味します。"<" はリトルエンディアンを使用することを意味します。
struct
1つまたは少数の2バイト文字列を整数に変換する必要がある場合は問題ありませんがarray
、numpy
それ自体がより適切なオプションです。具体的には、numpy.fromstring(適切なdtype
引数で呼び出される)は、バイトを文字列からの配列(それが何であれ)に直接変換できますdtype
。(numpy.little_endian
falseの場合は、バイトを交換する必要があります。詳細については、ここを参照してください。ただし、基本的には、作成byteswap
したばかりの配列オブジェクトでメソッドを呼び出す必要がありますfromstring
)。
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 に変換。