[英]How to write data to a binary file using Python
我正在为类似Java的字节码构建汇编程序。 本质上,它是一个Python函数,它接收一个字符串,该字符串是从一个包含操作码的文本文件中读取的,并将编译后的二进制数据写入一个文件中。 这是输入字符串字符串的示例(来自Example.txt
):
class Example
Method add
meta
lva 4
code
0: ipush 1 0
1: ipush 2 2
2: iload 1
3: iload 2
4: iadd
5: istore 3
6: iload 3
7: ireturn
我的任务是将Example.txt
文本文件转换为二进制表示形式(我的虚拟机的机器代码)。 每个操作码(例如iadd
)正好是一个字节长(即0到255之间的数字)。 一些操作码采用操作数,操作数也为一字节长。
仅将方法的操作码保存在二进制文件中非常容易。 我将每个操作码解析为0到255之间的数字,并使用array.append(op)
,然后使用array.tofile(handle)
。
但是,我不仅需要保存操作码,还需要保存数据,例如类的名称,方法的名称等。
如何将一个字节的值和更复杂的数据都保存到二进制文件中?
我已经设想过这样的事情...
该文件分为几个部分。 例如,第一部分将是class Example
。 下一部分是Method add
开始的部分。
本质上,只有两种类型的节:name节,其中仅包含class name
;方法节,其后又分为meta和code节。
名称部分以00
(十六进制)开头,然后需要提供类的名称( 这是我的问题 )。 那00
实际上是class
的十六进制表示。 方法部分以FF
开头,然后它们也需要在接下来的几个字节中显示其名称。 然后,在主要方法部分中,我可以用0F
表示“元部分的开始”,而用F0
“代码部分的开始”。
但是,仍然存在问题。 如何命名这些部分? 我想到了将“示例”中的每个字符转换为十六进制表示形式(即一个字节),然后将其保存在文件中的00
或FF
。 这可能意味着我将需要一些“节结束”符号。
有没有更好/更简单/已经实现的方法呢?
您在问一个关于设计以及基本Python使用的相当广泛的问题。 在不确定您对该问题进行一点限制之前,我不确定您会得到一个好的答案。
但是,让我们集中讨论如何将字符串(例如“ Example”)转换为整数数组,以便可以将其附加到array
。 确保您有一个字节字符串; 如果您有一串Unicode字符,请确保先将其编码为字节数组。 (如果您使用的是Python 2.x,则您的string
已经是字节数组。)
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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.