繁体   English   中英

如何使用Python将数据写入二进制文件

[英]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 “代码部分的开始”。

但是,仍然存在问题。 如何命名这些部分? 我想到了将“示例”中的每个字符转换为十六进制表示形式(即一个字节),然后将其保存在文件中的00FF 这可能意味着我将需要一些“节结束”符号。

有没有更好/更简单/已经实现的方法呢?

您在问一个关于设计以及基本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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM