Raz*_*777 20 python byte split bytearray
好了,所以我一直在使用Python来尝试创建波形图像和我得到从原始数据.wav采用文件song = wave.open()和song.readframes(1),它返回:
b'\x00\x00\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)
我想知道的是我如何分割成三个独立的字节,比如这个b'\x00\x00', b'\x00\x00',b'\x00\x00'因为每帧为3个字节宽,所以我需要每一个人字节的值才能够使一个波形.我相信无论如何我都需要这样做.
Mar*_*ers 29
您可以在byte对象上使用切片:
>>> value = b'\x00\x01\x00\x02\x00\x03'
>>> value[:2]
b'\x00\x01'
>>> value[2:4]
b'\x00\x02'
>>> value[-2:]
b'\x00\x03'
Run Code Online (Sandbox Code Playgroud)
但是,在处理这些帧时,您可能还想了解memoryview()对象 ; 这些允许您将字节解释为C数据类型而无需任何额外的工作,只需在底层字节上插入"视图":
>>> mv = memoryview(value).cast('H')
>>> mv[0], mv[1], mv[2]
256, 512, 768
Run Code Online (Sandbox Code Playgroud)
该mv对象现在是一个内存视图,将每2个字节解释为无符号短路; 所以现在它的长度为3,每个索引都是一个整数值,基于底层字节.
kyl*_*e k 13
这是一种可以将字节拆分为列表的方法:
data = b'\x00\x00\x00\x00\x00\x00'
info = [data[i:i+2] for i in range(0, len(data), 2)]
print info
Run Code Online (Sandbox Code Playgroud)
给出结果:
['\x00\x00', '\x00\x00', '\x00\x00']
Run Code Online (Sandbox Code Playgroud)
您实际上是在询问序列化/反序列化。使用 struct.pack 和 struct.unpack ( https://docs.python.org/3/library/struct.html )。这为您提供了很好的原语来进行解包和字节序交换等操作。例如:
import struct
struct.unpack("<H",b"\x00\x01") # unpacks 2 byte little endian unsigned int
struct.unpack(">l",b"\x00\x01\x02\x03") # unpacks 4 byte big endian signed int
Run Code Online (Sandbox Code Playgroud)
请注意,您的示例分割了 2 个字节的字,而不是字节。
由于这个问题也在有关分割二进制字符串的搜索中出现:
value = b'\x00\x01\x00\x02\x00\x03'
split = [value[i] for i in range (0, len(value))]
# now you can modify, for example:
split[1] = 5
# put it back together
joined = bytes(split)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57462 次 |
| 最近记录: |