簡體   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