#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]