Я пытаюсь прочитать бинарный файл, написанный в Objective-C, как это:NSUInteger написано в NSData (Objective-C) не может быть преобразован в виде целого числа (Java)
u_int32_t test = 71508;
NSMutableData * outputData = [ [ NSData dataWithBytes:&test length:sizeof(u_int32_t) ] mutableCopy ];
// Saves the data
...
// Then reading the value works fine
u_int32_t test;
[ self getBytes:&test length:sizeof(u_int32_t) ];
Тогда я пытаюсь читать int в Java:
// Read the file
...
Bytes ObjCBytes = byteArrayOutputStream.toByteArray();
...
// Try to convert my Objective-C byte array to an int :
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.put(ObjCBytes);
buffer.flip();
int ObjCInt = buffer.getInt();
Но у меня нет такого же результата!
Итак, я решил сделать то же самое в Java:
ByteBuffer buffer = ByteBuffer.allocate(4);
buffer.putInt(71508);
bytes javaBytes = buffer.array();
Кажется, что два байта массива инвертируются:
ObjCBytes: {84, 23, 1, 0}
javaBytes: {0, 1, 23, 84}
поведение одно и то же, независимо о f - целочисленное значение.
Извините: я новичок ... Я считаю, что причина в том, что Java не имеет unsigned int?
Я пробовал много ответов, но я не нашел решение.
Как преобразовать массив байтов в целое число независимо от языка, используемого для его записи?
Большое спасибо за помощь.
Вы можете просто изменить массив байтов на одной или другой стороне. – Avi
@Avi, да, если я считаю, что массив байтов был написан, если Objective-C. Я не хочу этого делать. – Christophe
Переверните его на стороне ObjC. Если вам также нужно прочитать его обратно в ObjC, вы поймете, что оно было отменено, поэтому вы снова его отмените. – Avi