2016-11-26 37 views
0

我有一個學生的工作,但我有一些問題。當我嘗試打開我的PNG文件,通過這個代碼:PNG文件以字節(或位)在其上工作

File file = new File("png.png"); 
byte[] fileContent = Files.readAllBytes(file.toPath()); 

for (int i=0; i<fileContent.length; i++) 
    System.out.println(fileContent[i]); 

我已經注意到,我的字節數,大於128,被轉換成負值。例如,第一個值(在PNG結構中)是137,在我的eclips視圖中是-119。怎麼了?我做錯了什麼,或者我不得不將某些負值轉換成不同的值?

我想做這種結構在加操作(但首先,我需要獲得知識約是位......)

+0

老兄,你的反應比查克·諾里斯快......非常感謝。我找不到我的答案,對此抱歉。 :) – Potato

+0

因爲Java中的字節被簽名。 [我怎樣才能讀取一個文件作爲Java中的無符號字節?](http://stackoverflow.com/q/5144080/995714) –

回答

0

一個字節只能-128和+127之間的接受值。你提到的137會環繞成爲-119。

如果你確實需要一個無符號數,你需要將其轉換爲int,並執行相應的位掩碼:

int value = ((int)fileContent[i]) & 0xff; 
+0

只是'fileContent [i]&0xff'就夠了,因爲'byte'必須是同意以任何方式提升爲'int' –

+0

同意,但添加演員表明明確的意圖對那些後來維護代碼。 –

+0

感謝您的回答:) – Potato

相關問題