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

Binary Native Endianness Generators

Boost , Spirit 2.5.2 , Binary Generators

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/karma/binary.hpp>
#include <boost/spirit/include/karma_binary.hpp>

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

Namespace

Имя

boost::::byte_ //lias: boost::spirit::karma::byte_

boost::::word //lias: boost::spirit::karma::word

boost::spirit::dword // alias: boost::spirit::karma::dword

boost::::qword //lias: boost::spirit::karma::qword

boost::spirit::bin_float // alias: boost::spirit::karma::bin_float

boost::spirit::bin_double // alias: boost::spirit::karma::bin_double

[Note]Note

Генераторы qword и qword(qw) доступны только на платформах, где константа препроцессора 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

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

Выражение

Описание

byte_

word

dword

qword

Выведите двоичное представление наименее значимых 64 битов обязательного атрибута в нативном эндианном представлении. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

bin_float

Выведите двоичное представление обязательного флоат-атрибута в родном эндиан-представлении. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

bin_double

byte_(b)

word(w)

Выведите двоичное представление наименее значимых 16 битов непосредственного параметра в нативном эндианном представлении. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

dword(dw)

Выведите двоичное представление наименее значимых 32 битов непосредственного параметра в нативном эндианном представлении. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

qword(qw)

Выведите двоичное представление наименее значимых 64 битов непосредственного параметра в нативном эндианном представлении. Этот генератор никогда не выходит из строя (если основной выходной поток не сообщает об ошибке).

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)

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

[Note]Note

В дополнение к их обычному атрибуту типа Attrib все перечисленные генераторы принимают экземпляр boost::optional<Attrib>. Если инициализируется boost::optional<> (имеет значение), генераторы ведут себя так, как если бы их атрибутом был экземпляр Attrib и испускают значение, сохраненное в boost::<>. В противном случае генераторы не сработают.

Complexity

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

Example
[Note]Note

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

Некоторые включают:

#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/support_utree.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/fusion/include/std_pair.hpp>
#include <iostream>
#include <string>

Некоторые используют декларации:

using boost::spirit::karma::byte_;
using boost::spirit::karma::word;
using boost::spirit::karma::dword;
using boost::spirit::karma::qword;

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

test_binary_generator("\x01", 1, byte_(0x01));
test_binary_generator("\x01\x02", 2, word(0x0201));
test_binary_generator("\x01\x02\x03\x04", 4, dword(0x04030201));
test_binary_generator("\x01\x02\x03\x04\x05\x06\x07\x08", 8, qword(0x0807060504030201LL));
test_binary_generator_attr("\x01", 1, byte_, 0x01);
test_binary_generator_attr("\x01\x02", 2, word, 0x0201);
test_binary_generator_attr("\x01\x02\x03\x04", 4, dword, 0x04030201);
test_binary_generator_attr("\x01\x02\x03\x04\x05\x06\x07\x08", 8, qword, 0x0807060504030201LL);

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

test_binary_generator("\x01", 1, byte_(0x01));
test_binary_generator("\x02\x01", 2, word(0x0201));
test_binary_generator("\x04\x03\x02\x01", 4, dword(0x04030201));
test_binary_generator("\x08\x07\x06\x05\x04\x03\x02\x01", 8, qword(0x0807060504030201LL));
test_binary_generator_attr("\x01", 1, byte_, 0x01);
test_binary_generator_attr("\x02\x01", 2, word, 0x0201);
test_binary_generator_attr("\x04\x03\x02\x01", 4, dword, 0x04030201);
test_binary_generator_attr("\x08\x07\x06\x05\x04\x03\x02\x01", 8, qword, 0x0807060504030201LL);


PrevUpHomeNext

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:39:16/0.010668039321899/1