Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python将数据写入二进制文件_Python_File_Hex_Binaryfiles - Fatal编程技术网

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

如何使用Python将数据写入二进制文件,python,file,hex,binaryfiles,Python,File,Hex,Binaryfiles,我正在为类似Java的字节码构建一个汇编程序。本质上,它是一个Python函数,它接收从包含操作码的文本文件读取的字符串,并将编译后的二进制数据写入文件。下面是一个输入字符串的示例(来自example.txt): 我的任务是将Example.txt文本文件转换为二进制表示形式(我的虚拟机的机器代码)。每个操作码(例如,iadd)正好有一个字节长(即0到255之间的数字)。有些操作码接受的操作数也有一个字节长 在二进制文件中只保存方法的操作码是相当容易的。我将每个操作码解析为一个0到255之间的数

我正在为类似Java的字节码构建一个汇编程序。本质上,它是一个Python函数,它接收从包含操作码的文本文件读取的字符串,并将编译后的二进制数据写入文件。下面是一个输入字符串的示例(来自
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']