Получение неправильного числа при преобразовании из байта [] в int - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь преобразовать int в байт [] и обратно, но я думаю, что на этом пути я что-то делаю не так. Мой код в основном:

byte[] array = new byte[4];
array[3] = (byte) ( num & 0xFF);   
array[2] = (byte) ((num >> 8) & 0xFF);   
array[1] = (byte) ((num >> 16) & 0xFF);   
array[0] = (byte) ((num >> 24) & 0xFF);

И

for (int i =0; i < 4; i++) {
    num = (num << 8) + (array[i] & 0xff);
}

Если я начну с числа 72, например, после преобразования его в байтовый массив и обратно получу число 795108710. Я пропускаю шаг или, может быть, мои порядковые номера перепутаны? Спасибо за ваше время.

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Используйте ByteBuffer; он содержит методы для кодирования множества различных типов данных без необходимости беспокоиться о порядке байтов и тому подобное:

ByteBuffer bb = ByteBuffer.allocate(32);
bb.putInt(index, 72);
...

int value = bb.getInt(index);
0 голосов
/ 22 ноября 2011

Попробуйте это:

array[3]=(byte)(num & 0xFF);
array[2]=(byte)(num & 0x0000FF00);
array[1]=(byte)(num & 0x00FF0000);
array[0]=(byte)(num & 0xFF000000);

Чтобы вернуть его:

num=(int)(array[0]&0xFF) | (int)(array[1]&0xFF) | (int)(array[2]&0xFF) | (int)(array[3]&0xFF);

Или попробуйте цикл, если хотите:

for(int i=0; i<4; i++)
{
 num=num+(int)(array[i]&0xFF);
}

Этот в C #. Не уверен, что это будет работать на Java. Но я думаю, подойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...