[英]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.