Существует несколько инструментов, которые могут автоматически генерировать код C ++ (или другой) для чтения и записи файлов, закодированных в BER. В моем проекте на C ++ мне нужны библиотеки для чтения и изменения файлов в кодировке BER. Я не могу генерировать классы C ++ на основе заданной структуры данных, потому что нет заданной структуры данных. Пользователь должен иметь возможность добавлять и удалять целые числа, строки и т. Д. Я нашел проект с открытым исходным кодом, в котором есть редактор с такой функциональностью:
http://www.codeproject.com/Articles/4910/ASN-1-Editor
Тем не менее, это в C # ….
Пожалуйста, дайте мне знать, если вы знаете, как я могу получить хорошую библиотеку C ++ с этой функциональностью, которую я могу использовать для своего проекта C ++.
Убедитесь, что у вас есть правильный файл определения ASN. Затем перейдите по ссылке http://lionet.info/asn1c/asn1c.cgi
вставьте определение ASN в данное окно. Нажмите кнопку «Продолжить компиляцию ASN.1». Если вы получили ошибку компиляции, исправьте ее. После успешной компиляции он сгенерирует код для вашего декодера. Попробуйте это хорошо.
Существует не так много общих библиотек чтения BER, потому что невозможно однозначно проанализировать произвольные данные BER без каких-либо знаний о схеме.
Инструмент, на который вы указываете в CodeProject, редактирует схемы ASN.1, которые ИСПОЛЬЗУЮТСЯ для создания кодировок BER, но вы НЕ МОЖЕТЕ двигаться в другом направлении, не зная ничего о данных или не догадываясь. Невозможно сказать, глядя на идентификатор & длина элемента BER, содержит ли этот элемент примитивные данные или другие элементы BER.
Вот самый маленький пример, который я придумал, чтобы продемонстрировать проблему, всего 5 байтов, с двумя радикально разными интерпретациями:
0xA0 0x03 0x02 0x01 0x00
Теперь это явно сконструированный, специфичный для контекста тип. Это также определенной длины. Но что внутри? Вы не можете сказать!
Это может быть целое число (0x02 — это примитивный тег для целого числа, 0x01 — это длина, значение 0x00).
Но это также может быть цепочка битов (вы можете поместить битовую строку в составной тип, а затем 2 — это количество неиспользованных битов в конце, что означает, что у нас есть 14 битов, которые получаются
0000 0001 0000 00xxb = 00 0000 0100 0000b = 0x0040.
Вы можете написать редактор, который будет читать / изменять / записывать файлы BER, но он должен знать схему, иначе он не сможет что-либо правильно прочитать.