0

私の仕事は、バイナリ リトルエンディアン .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 ...

最初のフロートさえも正しく識別できません。float の IEE754 表現を使用して最初の 4 バイトを変換すると、結果は -3.5047936775001176e-12 になりますが、最初の 4 バイト (= 最初の頂点の最初の x 座標) は -5.01449 になるはずです (バイナリから ascii ply ファイルへの meshlab の変換によると) )。

私はc++のfread、fseekなどを使用しています...

4 バイトごとにエンディアン スワップを試みましたが、結果も悪いです。

間違った方法でバイトを抽出していると思います。

4

1 に答える 1

0

@tinmanの説明によると:

unsigned int 変数に float を表すバイトが既にある場合は、unsigned int と float の共​​用体を作成し、unsigned int を共用体の unsigned int に代入してから、共用体の float を読み取ることができます。

于 2015-05-10T15:39:38.280 に答える