كيف يمكنني تحويل الباحث إلى ثلاث وحدات البايت في جافا ؟

StackOverflow https://stackoverflow.com/questions/185747

سؤال

أنا أحاول تحويل int إلى ثلاثة bytes يمثل هذا int (big endian).

أنا متأكد من أنها قد تفعل شيئا مع بت الحكمة بت التحول.ولكن ليس لدي أي فكرة عن كيفية القيام بذلك.

على سبيل المثال:

int myInt;

// some code

byte b1, b2 , b3; // b1 is most significant, then b2 then b3.

*ملاحظة, أنا على علم أن الباحث هو 4 بايت و ثلاثة بايت فرصة أكثر من/underflowing.

هل كانت مفيدة؟

المحلول

للحصول على البايت الأقل أهمية:

b3 = myInt & 0xFF;

2 البايت الأقل أهمية:

b2 = (myInt >> 8) & 0xFF;

و 3 البايت الأقل أهمية:

b1 = (myInt >> 16) & 0xFF;

التفسير:

المعامل اندينج قيمة مع 0xFF (11111111 في الثنائية) سيعود كبير على الأقل 8 بت (بت من 0 إلى 7) في هذا العدد.تحويل رقم إلى اليمين 8 مرات يضع بت 8 إلى 15 في بعض المواقف 0 إلى 7 حتى اندينج مع 0xFF سيعود الثانية بايت.وبالمثل, تحويل رقم إلى اليمين 16 مرة يضع بت 16 إلى 23 في بعض المواقف 0 إلى 7 حتى اندينج مع 0xFF بإرجاع 3 بايت.

نصائح أخرى

byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

وأنا غير متأكد كيف أن هذا holfds في جافا الرغم من ذلك، أنا عم ليس ديف جافا

ولا يصلح ان الباحث إلى 3 بايت. ومع ذلك، على افتراض أن تعرف هؤلاء الصغار معينة تفعل:

   byte b1 = (myInt & 0xff);
   myInt >>= 8;
   byte b2 = (myInt & 0xff);
   myInt >>= 8;
   byte b3 = (myInt & 0xff);

في جافا

int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);

النواتج 0 0 1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top