java - কশন - জাভা সুইং




বাইট অ্যারে(জাভা) পূর্ণসংখ্যা রূপান্তর (6)

একটি Byte Array একটি Integer রূপান্তর করার একটি দ্রুত উপায় কি?

উদাহরণস্বরূপ 0xAABBCCDD => {AA, BB, CC, DD}


আপনি BigInteger ব্যবহার করতে পারেন:

Integers থেকে:

byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }

ফেরত অ্যারে আকার প্রতিনিধিত্ব করার জন্য আকারের প্রয়োজন হয়, উদাহরণস্বরূপ 1 এর প্রতিনিধিত্ব করার জন্য এটি আকার 1 হতে পারে। যাইহোক, একটি int পাস হলে আকার চার বাইটের বেশি হতে পারে না।

স্ট্রিং থেকে:

BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();

যাইহোক, যদি আপনি প্রথম বাইটটি 0x7F (যেমন এই ক্ষেত্রে হয়) উচ্চতর হয়, তাহলে আপনাকে সতর্ক থাকতে হবে, যেখানে BigInteger অ্যারের শুরুতে 0x00 বাইট ঢোকাবে। ইতিবাচক এবং নেতিবাচক মানগুলির মধ্যে পার্থক্য করার জন্য এটি প্রয়োজন।


আপনি যদি Guava পছন্দ করেন তবে আপনি তার Ints ক্লাসটি ব্যবহার করতে পারেন:

int → → byte[] , toByteArray() ব্যবহার করুন:

byte[] byteArray = Ints.toByteArray(0xAABBCCDD);

ফলাফল {0xAA, 0xBB, 0xCC, 0xDD}

এর বিপরীতটি fromByteArray() বা থেকে fromBytes() :

int intValue = Ints.fromByteArray(new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD});
int intValue = Ints.fromBytes((byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD);

ফলাফল 0xAABBCCDD


এই ফাংশন ব্যবহার করুন এটা আমার জন্য কাজ করে

public byte[] toByteArray(int value) {
    return new byte[] {
            (byte)(value >> 24),
            (byte)(value >> 16),
            (byte)(value >> 8),
            (byte)value};
}

এটি একটি বাইট মান int মধ্যে অনুবাদ


এখানে একটি পদ্ধতি যা ঠিক কাজটি ঠিক করা উচিত।

public byte[] toByteArray(int value)
{
    final byte[] destination = new byte[Integer.BYTES];
    for(int index = Integer.BYTES - 1; index >= 0; index--)
    {
        destination[i] = (byte) value;
        value = value >> 8;
    };
    return destination;
};

স্থানান্তর করতে পারেন -

byte[] ba = new byte[4];
int val = Integer.MAX_VALUE;

for(byte i=0;i<4;i++)
    ba[i] = (byte)(val >> i*8);
    //ba[3-i] = (byte)(val >> i*8); //Big-endian

ByteBuffer বর্গ একটি বর্ণন আছে।

ByteBuffer b = ByteBuffer.allocate(4);
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN.
b.putInt(0xAABBCCDD);

byte[] result = b.array();

বাইটের আদেশ নির্ধারণ করে result[0] == 0xAA , result[1] == 0xBB , result[2] == 0xCC এবং result[3] == 0xDD

অথবা বিকল্পভাবে, আপনি নিজে এটি করতে পারেন:

byte[] toBytes(int i)
{
  byte[] result = new byte[4];

  result[0] = (byte) (i >> 24);
  result[1] = (byte) (i >> 16);
  result[2] = (byte) (i >> 8);
  result[3] = (byte) (i /*>> 0*/);

  return result;
}

ByteBuffer বর্গ যদিও যেমন নোংরা হাত কাজ জন্য ডিজাইন করা হয়েছিল। প্রকৃতপক্ষে ব্যক্তিগত java.nio.Bits ByteBuffer.putInt() দ্বারা ব্যবহৃত এই সহায়ক পদ্ধতিগুলি সংজ্ঞায়িত করে:

private static byte int3(int x) { return (byte)(x >> 24); }
private static byte int2(int x) { return (byte)(x >> 16); }
private static byte int1(int x) { return (byte)(x >>  8); }
private static byte int0(int x) { return (byte)(x >>  0); }





byte