Я взял на себя проект, который имеет частично реализованную спецификацию. У меня есть сообщение с различными полями. Одно из полей имеет идентификатор (называемый DestinationID) типа long. Внутри этого идентификатора говорится, что первые 4 байта (давайте назовем это слева) представляют что-то одно, а остальные 4 байта (давайте назовем это правильно) представляют другое. В настоящее время он реализован как 2 целых. Учитывая, что у меня есть эти 2 целых, есть ли способ собрать их вместе, чтобы получить первоначальное длинное значение? Кроме того, эти поля имеют порядок байтов, поэтому 2 целых числа читаются как байты с прямым порядком байтов. И когда я собираюсь вместе, я тоже хочу получить немного порядка байтов. Я делаю проб и ошибок, и ниже мои результаты пока. Пожалуйста, укажите на любые ошибки, которые вы видите. Спасибо.
int left = 262388740; // 1st 4 bytes
int right = 671091961; // Rest of 4 bytes
long destinationID = ((right) << 32) | (left & 0xffffffffL); // Trying to put the 2 together to get the long value
//Expected - f9 0c 00 28 04 bc a3 0f
//Received - 28 00 0c f9 0f a3 bc 04
Когда я печатаю (Long.toHexString(destinationID)
, я не получаю ожидаемое значение. Кажется, они поменялись местами.