Python 如何将每个字节放入列表中

Python 如何将每个字节放入列表中,python,list,python-3.x,byte,midi,Python,List,Python 3.x,Byte,Midi,我想打开一个MIDI文件并分析每个字节。但我对处理字节和位非常不熟悉。Midi是用十六进制写的,如果有什么不同的话 我想做的是将每个字节放入一个列表中,然后做一个for循环来检查每个字节。我该怎么做呢 我已经走了这么远(不是很远): 另外,如果任何人有任何易于理解的MIDI格式解释链接,那将不胜感激 刚刚完成扫描前40字节数据的代码。它使用类似C的%格式和更具pythonic风格的格式方法打印十进制值和十六进制值,如果格式规范是十六进制的,这可能更容易理解 midi文件已经下载并保存在脚本的目录

我想打开一个MIDI文件并分析每个字节。但我对处理字节和位非常不熟悉。Midi是用十六进制写的,如果有什么不同的话

我想做的是将每个字节放入一个列表中,然后做一个for循环来检查每个字节。我该怎么做呢

我已经走了这么远(不是很远):


另外,如果任何人有任何易于理解的MIDI格式解释链接,那将不胜感激

刚刚完成扫描前40字节数据的代码。它使用类似C的
%
格式和更具pythonic风格的
格式
方法打印十进制值和十六进制值,如果格式规范是十六进制的,这可能更容易理解

midi文件已经下载并保存在脚本的目录中(因此在测试时需要使用奇怪的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


contents=mFile.read()
contents
现在是一个字节数组,您可以使用
contents[n]
n作为偏移量来访问它。它将为您提供bytes@Jean-你所说的“字节的值”是什么意思?当我打印内容时,我得到b'MThd\x00\x00\x00\x06\x00(等),如果我得到fx内容[0],我得到77。77代表什么?我如何以xFF格式获取它?谢谢77是“M”的ASCII值。如果你需要字节序列而不是数字,那么就用切片代替。它工作得很好!谢谢不过,我还有最后一个问题;“x%02X”%contents[i]行是做什么的/它是如何工作的?它只是将77更改为十六进制值吗?它将值转换为十六进制字符串,仅用于显示/调试目的。要将整数与给定值进行比较,只需执行以下操作:
contents[i]==0x4d
Ah,这很有意义。非常感谢你的帮助!
# Open MIDI file
mFile = open("test.mid", 'rb')

# Checks if file is MIDI
hChunk = mFile.read(4)
if hChunk != b'MThd':
    raise ValueError('Not a MIDI file')

print(mFile.read())
import os

# Open MIDI file
mFile = open(os.path.join(os.path.dirname(__file__),"MIDI_sample.mid"), 'rb')

# Checks if file is MIDI
hChunk = mFile.read(4)
if hChunk != b'MThd':
    raise ValueError('Not a MIDI file')

contents = mFile.read()
mFile.close()

total_len = len(contents)

for i in range(0,40):
    print(contents[i],"x%02X"% contents[i],"x{:02X}".format(contents[i]))