Я пишу бинарный ридер, который должен читать в очень специфичном наборе бинарных файлов, написанных на Android-планшете. Читая этот двоичный файл, я столкнулся с несколькими проблемами, и в первую очередь он не похож на данные, которые я написал в первую очередь. Я прочитал немного о порядке байтов, словах и о том, как они сделаны в разных системах, и мне любопытно, может ли это быть причиной проблемы.
Любая информация была бы хороша на этом этапе, но я хотел бы знать одну конкретную вещь: учитывая строки ниже, почему двоичный файл не читается как то же значение, что и записано? Как я могу это исправить?
Скажите numPoints = 5000.
(НАРУЖНАЯ ФУНКЦИЯ — Android-Java)
out.writeInt(numPoints);
(В ФУНКЦИИ — UE4-c ++)
reader << numPoints;
Число numPoints теперь равно действительно большому числу, которое я не могу объяснить.
Я использую Windows 8.1 x64 и Google-Project-Tango Tablet.
Ваш код C ++, вероятно, читает числа в порядке с прямым порядком байтов. Java (по крайней мере, DataOutputStream) записывает двоичные числа как big-endian.
Вероятно, это проще исправить на стороне Java, поскольку для этого есть встроенная функция:
out.writeInt(Integer.reverseBytes(numPoints));
Вы также должны проверить, гарантирует ли UE4, что двоичные файлы имеют порядок с прямым порядком байтов, или является ли это прямым порядком байтов машины — в противном случае есть вероятность, что вы захотите перенести свою игру на платформу с прямым порядком байтов и столкнуться с проблемами позже.