2013-03-08 237 views
0

我對Python很新,並且一直在嘗試移植Java中的python腳本。 有一段時間我一直停留在下面的代碼邏輯,試圖將其轉換爲Java,但一直未能如願(可能是因爲我誤解了什麼實際正在做的)Java中的python struct.unpack

data = unpack('>H', file.read(2)) 
if data == 0xffff 
then //do something 
else //do something else 

現在,這是我認爲是在上面的python腳本中完成的: - 以十六進制格式解壓一個字符串(我相信,讀取文件的前2個字節),然後檢查它是否爲0)

是我對拆包的看法正確;如果不是,那麼究竟是什麼拆包呢?難道通過這種操作正從文件對象的子字符串: -

1 - 文件讀入到一個字節數組

2 - 獲取字節數組

然後做的第一2個元素?

有人能幫我寫下上面在Java中提到的Python的邏輯嗎?

+0

查看[struct](http://docs.python.org/2/library/struct.html)模塊。上面的代碼從文件中讀取10個字節的二進制數據(作爲字符串),並將其解釋爲大端無符號短整數。如果該整數等於「0xffff」或「65335」的十進制符號,則執行某些操作,否則執行其他操作。不能幫助你的Java部分。 – msvalkon 2013-03-08 07:48:07

+2

你確定它不是'unpack('> 5H',file.read(10))'將5個大端,無符號的短整數解包爲'tuple'嗎?因爲你會得到一個例外。 – eryksun 2013-03-08 08:20:59

+0

@eryksun:對不起,我混合了2行代碼。你是正確的,讀取10個字節是'> 5H',2個字節是'> H'。任何想法如何可以在Java中完成? Java,據我所知在Java中沒有無符號整數(他們是大的ENDIAN並簽名)。 – Rohan 2013-03-08 09:37:22

回答

1

在java中,您需要一個BigInteger,因爲Java native long不會保存大於64位的任何內容。

它可以使用字節數組進行初始化,所以你應該沒問題。