14

x次の方法で変数に値を代入します。

import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
x = w.readframes(1)

x と入力すると、次のようになります。

'\x1e\x00'

それでx値を取得しました。しかし、それは何ですか?16進数ですか?type(x)それと文字列をtype(x[0])教えてxくださいx[0]。この文字列をどのように解釈すればよいか誰か教えてもらえますか? それらを整数に変換できますか?

4

4 に答える 4

7

対話型インタープリターは、そのような印刷できない文字をエコーし​​ます。文字列には、0x1E と 0x00 の 2 バイトが含まれます。struct.unpack("<h", x)(リトルエンディアン、2バイト、符号付き)で整数に変換できます。

于 2010-01-14T10:58:07.670 に答える
3

はい、16 進数ですが、サンプル幅やチャンネル数など、wav ファイルの他の出力によって意味が異なります。データは、2 つのチャネルと 1 バイトのサンプル幅 (ステレオ サウンド) または 1 つのチャネルと 2 バイトのサンプル幅 (モノラル サウンド) の 2 つの方法で読み取ることができます。使用x.getparams(): 最初の数値はチャンネル数、2 番目の数値はサンプル幅です。

このリンクはそれを本当によく説明しています。

于 2013-11-17T02:12:23.673 に答える
1

これは 2 バイトの文字列です。

>>> x='\x1e\x00'
>>> map(ord, list(x))
[30, 0]
>>> [ord(i) for i in x]
[30, 0]
于 2010-01-14T11:00:18.980 に答える
0

この文字列はバイトを表します。構造体パッケージを使用して整数に変換できると思います。これにより、バイト文字列を解釈できます。

于 2010-01-14T10:57:29.080 に答える