byte[] toByteArray(int value) {
return ByteBuffer.allocate(4).putInt(value).array();
}
byte[] toByteArray(int value) {
return new byte[] {
(byte)(value >> 24),
(byte)(value >> 16),
(byte)(value >> 8),
(byte)value };
}
int fromByteArray(byte[] bytes) {
return ByteBuffer.wrap(bytes).getInt();
}
// packing an array of 4 bytes to an int, big endian, minimal parentheses
// operator precedence: <<, &, |
// when operators of equal precedence (here bitwise OR) appear in the same expression, they are evaluated from left to right
int fromByteArray(byte[] bytes) {
return bytes[0] << 24 | (bytes[1] & 0xFF) << 16 | (bytes[2] & 0xFF) << 8 | (bytes[3] & 0xFF);
}
// packing an array of 4 bytes to an int, big endian, clean code
int fromByteArray(byte[] bytes) {
return ((bytes[0] & 0xFF) << 24) |
((bytes[1] & 0xFF) << 16) |
((bytes[2] & 0xFF) << 8 ) |
((bytes[3] & 0xFF) << 0 );
}
স্বাক্ষরিত বাইটগুলিকে কোনও ইনটে প্যাকিং করার সময়, প্রতিটি বাইটকে মুখোশ দেওয়া দরকার কারণ পাটিগণিত প্রচারের নিয়মের (জেএলএস, রূপান্তর এবং প্রচারে বর্ণিত) কারণে এটি 32 বিট (শূন্য-প্রসারিতের পরিবর্তে) থেকে সাইন-প্রসারিত হয়।
জোশুয়া ব্লাচ এবং নীল গিটোয়ারের জাভা পাজলারের ("বিগ ডিলাইট ইন প্রতিটি বাইট") এ সম্পর্কিত একটি আকর্ষণীয় ধাঁধা আছে। কোনও বাইট মানকে কোন মানের সাথে তুলনা করার সময়, বাইটটি একটি প্রান্তে সাইন-প্রসারিত হয় এবং তারপরে এই মানটিকে অন্য মানের সাথে তুলনা করা হয়
byte[] bytes = (…)
if (bytes[0] == 0xFF) {
// dead code, bytes[0] is in the range [-128,127] and thus never equal to 255
}
নোট করুন যে সমস্ত সংখ্যার প্রকারভেদ 16-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার প্রকারের বাদে জাভাতে স্বাক্ষরিত।