Чтение двоичного файла PLY приводит к странным результатам

Моя задача - прочитать данные вершин из двоичного файла с прямым порядком байтов .ply. Проблема в том, что я не могу найти способ правильно извлечь данные, начиная с строки end_header.

PLY файл:

ply
format binary_little_endian 1.0
element vertex 240753
property float x
property float y
property float z
property float nx
property float ny
property float nz
element face 477808
end_header
(after the end header there is a A0 byte indicating the new line then, ...)
AC76A0C04301644163416a42 ...

Я не могу правильно определить даже первое поплавок. Если я конвертирую первые 4 байта, используя представление IEE754 для float, результат будет -3.5047936775001176e-12, однако первые четыре байта (= первая координата x первой вершины) должны быть -5.01449 (согласно преобразованию meshlab из двоичного файла в файл ascii ply ).

Я использую c ++ fread, fseek, ...

Я пробовал менять порядок байтов каждые 4 байта, но результат тоже плохой.

Я считаю, что неправильно извлекаю байты.


person dawe134    schedule 09.10.2011    source источник
comment
Что ты пробовал? Извлекая первые четыре байта ваших данных (0xC0A076AC) и конвертируя их в число с плавающей запятой, вы получаете -5.014486312866211.   -  person tinman    schedule 09.10.2011
comment
Извините, я ошибся при преобразовании с помощью онлайн-флеш-инструмента, теперь проблема в том, как на самом деле преобразовать его в c ++, вы можете подсказать, как преобразовать unsigned int в IEEE float?   -  person dawe134    schedule 10.10.2011
comment
Если у вас уже есть байты, которые представляют ваш float в переменной unsigned int, вы можете объединить беззнаковые int и float, назначить unsigned int, которое у вас есть, на unsigned int в объединении, а затем прочитать float в объединении.   -  person tinman    schedule 10.10.2011


Ответы (1)


Как описано @tinman:

Если у вас уже есть байты, которые представляют ваш float в переменной unsigned int, вы можете объединить беззнаковые int и float, назначить unsigned int, которое у вас есть, на unsigned int в объединении, а затем прочитать float в объединении.

person Community    schedule 10.05.2015