【问题标题】:Reading a .mp3 file as binary (NOT bytes)以二进制形式读取 .mp3 文件(非字节)
【发布时间】:2020-10-28 03:18:17
【问题描述】:

我正在尝试在 python 中获取音乐 (.mp) 文件的二进制表示。我目前只能以字节表示。当我尝试将这些字节转换为二进制时,我不断收到错误。这是我目前的程序:

folder=os.listdir(os.getcwd())
for files in folder:
    if files.endswith(".mp3"):
        file = open(files, 'rb')
        stream = str(file.read()).split("\\")
        print(stream)
        for bit in range(1,len(stream)):
            """
            print(stream[bit])
            newbit = f"0{stream[bit]}"
            c = BitArray(hex=newbit)
            #print(c.bin)
            """
            print(stream[bit][1:])
            print(bin(int(stream[bit][1:], base=16)))

我不断收到同样的错误:

line 39, in <module>
print(bin(int(stream[bit][1:], base=16)))
ValueError: invalid literal for int() with base 16: '00Info'

当我去检查语句print(stream) 中的字节时,字节x00Info 没有出现。我以前从未使用过字节,所以我不知道发生了什么。

【问题讨论】:

  • (1) 如果您想稍后使用字节,则不应使用“str”将字节转换为字符串。 (2)“int”类型有一个方法“from_bytes”从字节创建一个int(如果这真的是你想要的)
  • 你到底想做什么?你想要零和一?
  • Michael Butscher:是的,这很可能是正确的。但我真的很困惑,有一点“00Info”。这让我很惊讶。布拉德:是的,我想要 0 和 1

标签: python binary byte mp3


【解决方案1】:
import sys
with open(sys.argv[1], 'rb') as f:
    for c in f.read():
        print(bin(c)[2:])

您没有指定您期望的输出,但是,这将打印二进制文件。

【讨论】:

  • 谢谢,这比我想象的要简单。有没有办法将二进制流反转回 .mp3 文件?我正在尝试编写 LSB 编码/加密。
  • 请记住我在上面发布的内容没有 0 前缀任何可能是您需要解决的问题。 @Seppukki
  • 感谢您的提示,但我已经解决了。刚刚创建了一个while 循环,它检查字符串的长度并在开头添加一个零,直到长度达到 8
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
相关资源
最近更新 更多