如何使用Python将数据写入二进制文件
我正在为类似Java的字节码构建一个汇编程序。本质上,它是一个Python函数,它接收从包含操作码的文本文件读取的字符串,并将编译后的二进制数据写入文件。下面是一个输入字符串的示例(来自如何使用Python将数据写入二进制文件,python,file,hex,binaryfiles,Python,File,Hex,Binaryfiles,我正在为类似Java的字节码构建一个汇编程序。本质上,它是一个Python函数,它接收从包含操作码的文本文件读取的字符串,并将编译后的二进制数据写入文件。下面是一个输入字符串的示例(来自example.txt): 我的任务是将Example.txt文本文件转换为二进制表示形式(我的虚拟机的机器代码)。每个操作码(例如,iadd)正好有一个字节长(即0到255之间的数字)。有些操作码接受的操作数也有一个字节长 在二进制文件中只保存方法的操作码是相当容易的。我将每个操作码解析为一个0到255之间的数
example.txt
):
我的任务是将Example.txt
文本文件转换为二进制表示形式(我的虚拟机的机器代码)。每个操作码(例如,iadd
)正好有一个字节长(即0到255之间的数字)。有些操作码接受的操作数也有一个字节长
在二进制文件中只保存方法的操作码是相当容易的。我将每个操作码解析为一个0到255之间的数字,然后使用array.append(op)
,然后使用array.tofile(handle)
但是,我不仅需要保存操作码,还需要保存数据,例如类名、方法名等
如何将单字节值和更复杂的数据保存到二进制文件中?
我想象过这样的事情
该文件分为多个部分。例如,第一部分是类示例
。下一节是由方法add
开始的
本质上,只有两种类型的部分,名称部分(仅包含类名
)和方法部分(然后再细分为元和代码部分)
名称部分以00
(十六进制)开头,然后需要显示类的名称(这是我的问题)。00
本质上是类的十六进制表示形式。方法部分以FF
开头,然后它们也需要在接下来的几个字节中显示它们的名称。然后,我可以将0F
表示为“元节的开始”,而F0
表示主要方法节内的“代码节的开始”
然而,一个问题仍然存在。如何命名这些部分?我有一个想法,将例如“Example”中的每个字符转换为它的十六进制表示形式,一个字节,然后将它们保存在00
或FF
之后的文件中。这可能意味着我需要一些“部分结束”符号
有没有更好的/更简单的/已经实现的方法可以做到这一点?您提出了一个关于设计和基本Python用法的非常广泛的问题。我不确定你会得到一个好答案,除非你把这个问题限制一点
但让我们集中讨论如何将字符串(例如“Example”)转换为整数数组,以便将其附加到数组中。确保您有一个字节字符串;如果您有一个Unicode字符字符串,请确保首先将其编码为字节数组。(如果您使用的是Python2.x,那么您的字符串已经是一个字节数组。)
给出:
[0, 'E', 'x', 'a', 'm', 'p', 'l', 'e']
out = [0] # your output array
s = "Example" # a byte string, not a Unicode string
l = list(s) # convert to array of ints
out = out + l
print out
[0, 'E', 'x', 'a', 'm', 'p', 'l', 'e']