Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Binary Native Endianness Parsers

Boost , Spirit 2.5.2 , Binary Parsers

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Description

Бинарные нативные эндианные парсеры предназначены для разбора бинарных байт-потоков, которые выложены в нативной эндианности целевой архитектуры.

Header
// forwards to <boost/spirit/home/qi/binary.hpp>
#include <boost/spirit/include/qi_binary.hpp>

Кроме того, см. Включить структуру .

Namespace

Имя

boost::::byte_ //lias: boost::spirit::qi::byte_

boost::::word //lias: boost::spirit::qi::word

boost::spirit::dword // alias: boost::spirit::qi::dword

boost::::qword //lias: boost::spirit::qi::qword

boost::spirit::bin_float // alias: boost::spirit::qi::bin_float

boost::spirit::bin_double // alias: boost::spirit::qi::bin_double

[Note]Note

qword доступен только на платформах, где константа препроцессора BOOST_HAS_LONG_LONG определяется (т.е. на платформах, имеющих встроенную поддержку неподписанных длинных длинных (64 бит) целых типов).

Model of

Notation

b

Один байт (8-битное двоичное значение) или Ленивый аргумент, который оценивается до одного байта. Это значение всегда в родном эндиане.

w

16-битное двоичное значение или ленивый аргумент, оценивающий до 16-битного двоичного значения. Это значение всегда в родном эндиане.

dw

32-битное двоичное значение или ленивый аргумент , который оценивает до 32-битного двоичного значения. Это значение всегда в родном эндиане.

qw

64-битное двоичное значение или Lazy Argument, которое оценивается до 64-битного двоичного значения. Это значение всегда в родном эндиане.

f

Поплавковое двоичное значение или Ленивый аргумент, который оценивает поплавковое двоичное значение. Это значение всегда в родном эндиане.

d

Двойное двоичное значение или Ленивый аргумент, который оценивает двойное двоичное значение. Это значение всегда в родном эндиане.

Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в PrimitiveParser.

Выражение

Описание

byte_

Соответствует любой 8-битной нативной эндиановой двоичной системе.

word

dword

Соответствует любому 32-битному нативному эндиану.

qword

Соответствует любой 64-битной нативной эндиановой двоичной системе.

bin_float

bin_double

Соответствует любому двойному родному эндиану.

byte_(b)

word(w)

dword(dw)

qword(qw)

bin_float(f)

bin_double(d)

Attributes

Выражение

Атрибут

byte_

boost::uint_least8_t

word

boost::uint_least16_t

dword

boost::uint_least32_t

qword

boost::uint_least64_t

bin_float

float

bin_double

double

byte_(b)

неиспользованный

word(w)

неиспользованный

dword(dw)

неиспользованный

qword(qw)

неиспользованный

bin_float(f)

неиспользованный

bin_double(d)

неиспользованный

Complexity

O(N), где N - число разреженных байтов

Example
[Note]Note

Испытательный ремень для примера (примеров) ниже представлен в разделе Основные примеры.

Использование деклараций и переменных:

using boost::spirit::qi::byte_;
using boost::spirit::qi::word;
using boost::spirit::qi::dword;
using boost::spirit::qi::qword;
boost::uint8_t uc;
boost::uint16_t us;
boost::uint32_t ui;
boost::uint64_t ul;

Базовое использование нативных бинарных парсеров для небольших эндиан-платформ:

test_parser_attr("\x01", byte_, uc); assert(uc == 0x01);
test_parser_attr("\x01\x02", word, us); assert(us == 0x0201);
test_parser_attr("\x01\x02\x03\x04", dword, ui); assert(ui == 0x04030201);
test_parser_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul);
assert(ul == 0x0807060504030201LL);
test_parser("\x01", byte_(0x01));
test_parser("\x01\x02", word(0x0201));
test_parser("\x01\x02\x03\x04", dword(0x04030201));
test_parser("\x01\x02\x03\x04\x05\x06\x07\x08",
    qword(0x0807060504030201LL));

Базовое использование нативных бинарных парсеров для больших эндиан-платформ:

test_parser_attr("\x01", byte_, uc); assert(uc == 0x01);
test_parser_attr("\x01\x02", word, us); assert(us ==  0x0102);
test_parser_attr("\x01\x02\x03\x04", dword, ui); assert(ui == 0x01020304);
test_parser_attr("\x01\x02\x03\x04\x05\x06\x07\x08", qword, ul);
assert(0x0102030405060708LL);
test_parser("\x01", byte_(0x01));
test_parser("\x01\x02", word(0x0102));
test_parser("\x01\x02\x03\x04", dword(0x01020304));
test_parser("\x01\x02\x03\x04\x05\x06\x07\x08",
    qword(0x0102030405060708LL));


PrevUpHomeNext

Статья Binary Native Endianness Parsers раздела Spirit 2.5.2 Binary Parsers может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Binary Parsers ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:16:25/0.0073800086975098/0