Selasa, 25 Agustus 2015

How to convert byte to int without minus value

Perbedaan mendasar type data primitif di java seperti byte, int, long, double, dan yang lainnya harus dipahami dengan baik, penulis pernah mendapati sedikit masalah ketika ingin mengolah sebuah file data mentah yang dibaca kedalam sebuah type data primitive yaitu byte, seperti berikut


       

Path path = Paths.get(lokasiFile);
byte data = Files.readAllBytes(path);


       
 

Dikarenakan type byte di java mempunyai rentang nilai -128 sampai +128 menjadi masalah bila dikonversi ke type biner 8 bit yang tidak menghendaki nilai integer minus! Karena nilai byte dari sebuah file di java seperti itu, berbeda dengan C# yang mempunyai nilai byte -256 sampai 256 dan bila kita menggunakan function Files.ReadAllBytes di C# menghasilkan nilai byte yang mempunyai nilai 0 sampai 256.
Inilah letak perbedaan yang mendasar,
Jikalau di C# mengembalikan nilai byte a = 240
Maka di java byte a = (byte) 240 menghasilkan nilai a = -16
Yaitu mengandung nilai minus
Sehingga kita perlu konversi kan ke nilai int

       
public class Contoh {
    public static void main(String[] args) {
        byte a = -10;
        int b = a & 0xFF; //untuk mencegah nilai minus
        byte c = (byte) b;
        byte d = (byte) 240;
        int endl = 0;
    }
    
}

       
 

Bila kita debug menghasilkan


Perhatikan bahwa byte a = -10 (misalnya kita membaca sebuah stream byte file)
Ingin dikonversi ke nilai int dengan menambahkan & 0xFF menghasilkan nilai integer 246. 


Posting Komentar