类似于 个问题,我试图阅读一ID3v2标签头和我有麻烦了解如何获得各个字节蟒蛇。

我第一次读都十字节到一串。然后我想要分析的各个部分的信息。

我可以抓住两个版本数字符串中,但后来我不知道如何把这两个字,并得到整数。

该结构包似乎是我想要什么,但我不能让它工作。

这里是我的代码迄今为止(我非常python顺便说一句...所以采取我很容易):

def __init__(self, ten_byte_string):
        self.whole_string = ten_byte_string
        self.file_identifier = self.whole_string[:3]
        self.major_version = struct.pack('x', self.whole_string[3:4]) #this 
        self.minor_version = struct.pack('x', self.whole_string[4:5]) # and this
        self.flags = self.whole_string[5:6]
        self.len = self.whole_string[6:10]

印刷出了任何价值,除了很明显是废话因为他们是格式不正确。

有帮助吗?

解决方案

如果你有一串,有2个字节,希望你解释为16位整数,可以通过:

>>> s = '\0\x02'
>>> struct.unpack('>H', s)
(2,)

注意,>被for big-endian(部分最大的整数来第一次).这是格式id3标签的使用。

对于其他尺寸的整数,则使用不同的格式编码。例如。"我"签署的32位整数。看看帮助(结构)对于细节。

你也可以解开几个要素。例如,用于2个符号的短裤,随后通过签署的32位的价值:

>>> a,b,c = struct.unpack('>HHi', some_string)

去你的代码,你正在寻找(按顺序):

  • 3char字符串
  • 2单个字节的数值(主要和次要版本)
  • 1字节的标志变
  • 一个32位的长度量

Format string为这将是:

ident, major, minor, flags, len = struct.unpack('>3sBBBI', ten_byte_string)

其他提示

为什么要自己写? (假设你没有检查出这些其他选项。)有几个选项用于从Python中读取MP3中的ID3标签信息。在答案 /stackoverflow.com/questions/8948/accessing-mp3-meta-data-with-python">这个问题。

  

我正在尝试读取ID3v2标记标题

FWIW,已经是模块

我打算推荐 struct 包,但之后你说你已经尝试过了。试试这个:

self.major_version = struct.unpack('H', self.whole_string[3:5])

pack()函数将Python数据类型转换为位, unpack()函数将位转换为Python数据类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top