2016-03-27 35 views
1

Bu yüzden burada biraz sorunum var ve neyin yanlış olabileceğine dair bir fikrim yok. Bu yüzden bu (şimdi size göstereceğim) doğru olup olmadığını soruyorum. İkili Dosyaları Bayt Listelerine dönüştürüyorum, böylece bu baytları yarım bayta dönüştürebiliyorum. Örnek: Eğer ondalık sayı olarak 96 alırsam (60 tane onaltılık) 6 ve 0 çıkarmak istiyorum. 127 ile aynı şey (onaltılık: 7F) -: Benİmzalı bir bayt işaretsiz bir yarım baytlık dönüştüre

çalışmak için bunun için "imzasız bayt" gerektiğini, Sen farkedeceğiniz 7 ve 15. Bunu başarmak için almak istiyorum ben aşağıdaki kodu yazdım
System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16))/16)); 
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16)); 

public static int unsignedToBytes(byte b) { 
    return b & 0xFF; 
} 

Yanlış bir şey yapıyorum veya bu bir Sorun değil mi?

+0

Sorun nedir? – Natecat

+0

Yanlış koordinatlarda yanlış değerler alıyorum ve sadece sorunun burada olup olmadığını bilmek istiyorum – RoiEX

cevap

1

Kullanım bit kayması ve bit seviyesinde işlemler:

  • çünkü alt dört biti olsun lowerNibble = wholeByte & 0x0F
  • üst dört biti elde etmek için, bu işareti göz ardı upperNibble = (wholeByte >> 4) & 0x0F

kullanmak kullanmak için Sayının üst kısmı & 0x0F tarafından kesilmiştir.

+0

Bu, 0x80'den büyük değerler ile çalışıyor mu? – RoiEX

+0

@RoiEX Kesinlikle, öyle. – dasblinkenlight