특정 파일 포맷 스펙에 맞는 바이너리 파일 생성 방법 문의

cleitia의 이미지

C++를 이용해서 아스키 형태로 저장된 포인트클라우드 데이터를 Cesium(http://cesiumjs.org)에서 사용하는 pnts 바이너리 포맷으로 변경하려는데 자료형, 이진파일 등에 대한 이해가 부족해서인지 스펙 정보를 이용하여 바이너리 포맷 파일을 만드는데 어려움이 발생해서 질문을 올립니다.

우선 pnts 포맷의 스펙과 헤더의 속성정보는 그림 1, 2와 같습니다.

현재 바이너리 형식의 샘플 파일(test.pnts)의 헤더부분을 해석해보고 있는데 그 결과는 그림 3과 같습니다.
pnts 파일의 내용은 Notepad++를 이용하여 16진법으로 변경했고 이 값들을 10진법 숫자로 바꾸어서 그 값을 확인했습니다.

현재 magic, version, byteLength 까지는 해석이 제대로 된 것 같은데 나머지 FeatureTableJSONByteLength, FeatureTableBinaryByteLength, batchTableJSONByteLength, batchTableBinaryByteLength 들은 매우 큰 값이 나옵니다.

위의 Header Field 설명을 보면 FeatureTableJSONByteLength 의 바이트 버퍼 크기는 결국 전체 byte 길이를 넘을 수 없을 것이라 생각했는데 너무 큰 값이 나옵니다.

혹시 제가 잘못 해석한 것인지 아니면 샘플 파일을 생성할 때 좀 다르게 생성이 된 것인지, 또는 포맷 스펙을 이용해서 파일을 만들 때 제가 생각한 방식이 잘못 된 것인지에 대한 코멘트 부탁드립니다.

감사합니다.

File attachments: 
첨부파일 크기
Image icon noname01.jpg20.88 KB
Image icon noname02.jpg26.02 KB
Image icon noname03.jpg454.32 KB
chadr의 이미지

x86은 리틀엔디언 cpu입니다. 예를들어 66 92 80 00를 우리가 읽는 숫자 방식으로 바꾸면 00 80 92 66이 되고 이는 정수로 8,426,086 입니다.

엔디언으로 찾아보시고 아마 pnts라는 포맷의 정수형은 빅엔디언으로 표기될 것 같네요. htonl, ntohl을 찾아보세요.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

bushi의 이미지

레퍼런스인 PointCloud3DTileContent.js 를 보면,
1. DataView.getUint32(..., true) 로 모든 필드를 읽어내고 있으니 전부 little endian.
2. byteLength 필드는 아예 읽어내지도 않고 offset 조정을 해서 다음 필드로 skip.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.