Можно попробовать это изменение...
Установка BeautifulSoup
и бэкенд lxml
(синтаксический анализатор) библиотеки:
user$ pip3 install lxml bs4
Процесс Ваш XML-документ:
from bs4 import BeautifulSoup
with open('/path/to/file.xml', 'r') as doc:
for line in doc:
print(BeautifulSoup(line, 'lxml').prettify())
Я нашел этот заголовок особенно полезным: BOOST cstdint
Обычно лучше, чем изобретение собственного колеса (которое требует обслуживания и тестирования).
Создайте файл заголовка с именем types.h и определите все примитивы фиксированного размера нужные вам типы (int32, uint32, uint8 и т. д.). Для поддержки нескольких платформ вы можете либо использовать #ifdef
, либо создать отдельный каталог include для каждой платформы (include_x86, include_x86_64, include_sparc). В последнем случае у вас будут отдельные конфигурации сборки для каждой платформы, которая будет иметь правильный каталог include в своем пути включения. Второй метод предпочтительнее, согласно «Проблемам C ++» Стивена Дьюхерста.
Кстати, если вы планируете передавать двоичные данные между разными платформами, вам также нужно беспокоиться о порядке байтов.
Частью стандарта C99 был файл заголовка stdint.h для предоставления такой информации. Например, он определяет тип с именем uint32_t. К сожалению, многие компиляторы не поддерживают stdint.h. Лучшая кроссплатформенная реализация stdint.h, которую я видел, находится здесь: http://www.azillionmonkeys.com/qed/pstdint.h . Вы можете просто включить это в свой проект.
Если вы используете boost, я считаю, что он также предоставляет что-то эквивалентное заголовку stdint.
Определите тип (например, int32) в файле заголовка. Для каждой платформы используйте другой #ifdef и убедитесь, что in32 является 32-битным целым числом. Повсюду в вашем коде используйте int32 и убедитесь, что при компиляции на разных платформах вы используете правильное определение
Две вещи:
Во-первых, есть файл заголовка с именем limits.h, который дает много полезной платформы конкретная информация. Например, он предоставит максимальные и минимальные значения для типа int. Исходя из этого, вы можете определить, насколько велик тип int.
Вы также можете использовать для этих целей оператор sizeof во время выполнения.
Надеюсь, это поможет. . .
К
Существует заголовок stdint.h, определенный стандартом C99 и (я думаю) тем или иным вариантом ISO C ++. Это определяет хорошие типы, такие как int16_t, uint64_t и т.д., которые гарантированно имеют определенный размер и представление. К сожалению, его доступность не совсем стандартная (Microsoft, в частности, была здесь "ногтем").
Простой ответ таков, который работает на каждой 32- или 64-битной архитектуре с байтовой адресацией, о которой я знаю:
Имейте в виду, что некоторые 32-битные компиляторы вообще не имеют 64-битного типа,