2010-10-22 60 views
0

我想寫一個ROM文件補丁,我來到這個文檔中:如何將多字節字節添加到一起?

The next three bytes are the place in the destination file 
(the file to be patched) where a change is to be made. 

The two bytes following that are the length of the amount 
of data to be changed. 

我怎麼會變成這三個和兩個字節到一個單一的數字在java中正確?

+0

讀取下一個字節,或將其與結果(您的臨時VAR),然後離開了8位,重複的結果轉移。 – mojuba 2010-10-22 23:28:16

+2

@mojuba - 將這寫爲問題的建議答案之一,以便William能夠接受,如果他發現它回答問題。 – AndyPerfect 2010-10-22 23:30:06

+0

@mojuba這是一個正常的或或按位或?我也會通過編碼「<< 8」來改變它嗎? – William 2010-10-22 23:34:05

回答

1

請確保您使用的InputStream(字節字符VS輸入)的後代。

要問的最重要的問題是數據是以「小端」還是「大端」方式存儲的。我將假設小端(x86)。對於三字節編號:

FileInputStream fs = new FileInputStream(...); 

int byte1 = fs.read(); 
int byte2 = fs.read(); 
int byte3 = fs.read(); 
int data = (byte3 << 16) | (byte2 << 8) | byte1; 

對於little-endian,讀取的第一個字節是最不重要的字節。

如果需要大端,改變最後一行:

int data = (byte1 << 16) | (byte2 << 8) | byte3; 
+0

謝謝,我認爲這會奏效。 – William 2010-10-22 23:47:15

2

奇怪的是,我看到喬伊,他刪除了11分鐘前一個有效的答案:

(byte1 << 16) + (byte2 << 8) + byte3 

我要補充的唯一的事,你不從InputStream進行讀取的字節轉換爲byte類型( InputStream#read返回int值在0和255之間)。例如,這將變爲255,例如-1,我們不需要這種副作用。

因此,它可能看起來像

(in.read() << 16) + (in.read() << 8) + in.read()