คู่มือฉบับสมบูรณ์สำหรับการทำงานกับไบต์ที่ไม่ได้ลงนามใน Java:
(ที่มาสำหรับคำตอบนี้)
ภาษาจาวาไม่ได้ให้อะไรเหมือนunsigned
คำสำคัญ byte
ตามสเปคภาษาหมายถึงค่าระหว่าง -128 - 127 ตัวอย่างเช่นถ้าbyte
ถูกโยนไปยังint
Java จะตีความบิตแรกเป็นสัญญาณและการใช้เครื่องหมายนามสกุล
ที่ถูกกล่าวว่าไม่มีอะไรป้องกันคุณจากการดูbyte
เพียง 8 บิตและตีความบิตเหล่านั้นเป็นค่าระหว่าง 0 และ 255 เพียงจำไว้ว่าไม่มีอะไรที่คุณสามารถทำได้เพื่อบังคับให้การตีความของคุณตามวิธีการของคนอื่น หากวิธีการยอมรับ a byte
แล้ววิธีนั้นจะยอมรับค่าระหว่าง −128 และ 127 เว้นแต่จะระบุไว้เป็นอย่างอื่นอย่างชัดเจน
นี่คือการแปลง / กิจวัตรที่มีประโยชน์เพื่อความสะดวกของคุณ:
การแปลงเป็น / จาก int
// From int to unsigned byte
int i = 200; // some value between 0 and 255
byte b = (byte) i; // 8 bits representing that value
// From unsigned byte to int
byte b = 123; // 8 bits representing a value between 0 and 255
int i = b & 0xFF; // an int representing the same value
(หรือถ้าคุณใช้ Java 8+ ให้ใช้Byte.toUnsignedInt
)
การแยก / การจัดรูปแบบ
วิธีที่ดีที่สุดคือใช้การแปลงด้านบน:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
เลขคณิต
การเป็นตัวแทน 2 ส่วน "เพิ่งได้ผล" สำหรับการบวกการลบและการคูณ:
// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;
byte sum = (byte) (b1 + b2); // 215
byte diff = (byte) (b1 - b2); // 185
byte prod = (byte) (b2 * b2); // 225
Division ต้องการการแปลงตัวถูกดำเนินการแบบแมนนวล:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));