将little endian字符串转换为整数

Jef*_*rth 12 python numpy wav

我已经使用波形模块从波形文件中读取样本,但它将样本作为字符串给出,它不在波形中,因此它是小端(例如,\x00).

将此转换为python整数或numpy.int16类型的最简单方法是什么?(它最终将成为numpy.int16,所以直接进入那里很好).

代码需要适用于小端和大端处理器.

Ned*_*der 20

struct模块将打包数据转换为Python值,反之亦然.

>>> import struct
>>> struct.unpack("<h", "\x00\x05")
(1280,)
>>> struct.unpack("<h", "\x00\x06")
(1536,)
>>> struct.unpack("<h", "\x01\x06")
(1537,)
Run Code Online (Sandbox Code Playgroud)

"h"表示短整数或16位整数."<"表示使用little-endian.


Ale*_*lli 12

struct是好的,如果你将一个或少数2个字节的字符串为整数,但arraynumpy它本身是更好的选择.具体来说,numpy.fromstring(使用适当的dtype参数调用)可以直接将字符串中的字节转换为数组(无论dtype是什么).(如果numpy.little_endian为false,则必须交换字节 - 请参阅此处以获取更多讨论,但基本上您需要byteswap在刚刚构建的数组对象上调用该方法fromstring).

  • 如果你不急,或者数据点很少,那很好.否则,你_can_将字节顺序编码为字符串作为`dtype`的一部分(尽管我不知道详细信息). (2认同)