Чтение пользовательских двоичных форматов данных в C # .NET - PullRequest
1 голос
/ 24 августа 2010

Я пытаюсь написать простую программу чтения DWG-файлов AutoCAD в .NET.На самом деле мне не нужен доступ ко всем данным в файле, поэтому сложность, которая в противном случае была бы связана с написанием программы чтения / записи для всего формата файла, не является проблемой.

Мне удалось прочитать восновы, такие как версия, все данные заголовка, записи локатора раздела, но у меня проблемы с чтением реальных разделов.

Проблема, как представляется, связана с тем, что формат использует пользовательский методхранение некоторых типов данных.Я подхожу к спецификациям здесь:

http://www.opendesign.com/files/guestdownloads/OpenDesign_Specification_for_.dwg_files.pdf

В частности, типы, которые зависят от чтения отдельных битов, являются типами, которые я пытаюсь прочитать.Большая часть проблемы, по-видимому, заключается в том, что C # BinaryReader позволяет вам читать только целые байты за раз, тогда как на самом деле я считаю, что мне нужна способность считывать отдельные биты, а не просто 8-битные или кратные одновременно.

Может быть, я неправильно понимаю спецификацию и то, как ее интерпретировать, но если кто-то может прояснить, как я могу читать отдельные биты из потока или даже как читать некоторые переменныетипы в приведенной выше спецификации, которые требуют более сложных манипуляций с битами, чем простое чтение полных байтов, тогда это было бы превосходно.

Я понимаю, что для этого есть коммерческие библиотеки, но цена слишком высокана всех из них, чтобы быть оправданным для поставленной задачи.

Любая помощь высоко ценится.

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Вы всегда можете использовать класс BitArray для выполнения побитовой манипуляции. Таким образом, вы читаете байты из файла и загружаете их в BitArray, а затем получаете доступ к отдельным битам.

0 голосов
/ 09 марта 2011

По цене любой из этих библиотек вы определенно не можете разработать что-то стабильное самостоятельно. Сколько времени вы потратили до сих пор?

...