Преобразование целого числа в массив байтов без знака с помощью java или Android

#java #c# #android #arrays #bitconverter

#java #c# #Android #массивы #bitconverter

Вопрос:

Привет, я видел много ссылок в SO для преобразования целочисленного значения в массив байтов без знака. но я не могу получить четкую идею. мое преобразование выглядит следующим образом

// в Android

 int checksum=104396;

byte[] byteArray = GetBytesInt(checksum);

public static byte[] GetBytesInt(int value) {
        byte[] bytes = new byte[4];
        bytes[0] = (byte) (value >> 24);
        bytes[1] = (byte) (value >> 16);
        bytes[2] = (byte) (value >> 8);
        bytes[3] = (byte) (value);
        return bytes;
    }
  

Вывод в Android
[0,1, -105, -52]

// в c#

 uint CheckSum=104396;

byte[] byteArray=BitConverter.GetBytes(CheckSum)

where BitConverter is System method
  

вывод на c#

[204,151,1,0]

Как я получаю этот вывод на Java или Android. Я проверяю java 8 и Guava, которые возвращают то же самое.

пожалуйста, помогите мне с некоторым кодированием

Комментарии:

1. Output in android . Вы не опубликовали код, который выводит.

2. я упомянул значение байта op под кодом

3. Нет. Конечно, я уже видел результат. Но я попросил код, который вы использовали для создания выходных данных. Как вы их печатали?

4. Вы видите, что результат в порядке? Java и C # дают одинаковые результаты. Добавьте 256 к отрицательным значениям в Android. Отличается только последовательность. При печати вы должны рассматривать каждое значение байта как беззнаковое.

Ответ №1:

Согласно предложению @greenapps, получение массива байтов в формате LITTLE_ENDIAN решило проблему.

 ByteBuffer byteBuffer = ByteBuffer.allocate(4);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
byteBuffer.putInt((int) (value amp; 0xffffffffL));
byte[] array=Bytes.asList(byteBuffer.array())
  

Вывод в Android

[-52,-105,1,0]