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

hex

Boost , The Boost Algorithm Library , Other Algorithms

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

Файл заголовка<'boost/algorithm/hex.hpp'>содержит три варианта каждого из двух алгоритмов,<hex>и<unhex>. Они являются обратными алгоритмами, то есть один отменяет усилия другого.<hex>берет последовательность значений и превращает их в шестнадцатеричные символы.<unhex>берет последовательность шестнадцатеричных символов и выводит последовательность значений.

<hex>и<unhex>происходят из MySQL, где они используются в запросах базы данных и хранящихся процедурах.

interface

Функция<hex>принимает последовательность значений и пишет шестнадцатеричные символы. Существует три различных интерфейса, отличающихся только тем, как указана входная последовательность.

Первый берет пару итераторов. Второй принимает указатель к началу нулевой последовательности, такой как строка c, а третий принимает диапазон, как определено Boost. Библиотека рангов.

template <typename InputIterator, typename OutputIterator>
OutputIterator hex ( InputIterator first, InputIterator last, OutputIterator out );
template <typename T, typename OutputIterator>
OutputIterator hex ( const T *ptr, OutputIterator out );
template <typename Range, typename OutputIterator>
OutputIterator hex ( const Range &r, OutputIterator out );

<hex>записывает только значения в диапазоне '0'.'9' и 'A'.'F', но не ограничивается выводом символов. Выходной итератор может относиться к строчке, или вектору целых чисел, или любому другому интегральному типу.

Функция<unhex>берет выход<hex>и превращает его обратно в последовательность значений.

hex. .

template <typename InputIterator, typename OutputIterator>
OutputIterator unhex ( InputIterator first, InputIterator last, OutputIterator out );
template <typename T, typename OutputIterator>
OutputIterator unhex ( const T *ptr, OutputIterator out );
template <typename Range, typename OutputIterator>
OutputIterator unhex ( const Range &r, OutputIterator out );

Error Handling

Заголовок hex.hpp определяет три класса исключений:

struct hex_decode_error: virtual boost::exception, virtual std::exception {};
struct not_enough_input : public hex_decode_error;
struct non_hex_input : public hex_decode_error;

Если на входе<unhex>не содержится «четного числа» шестизначных цифр, то выбрасывается исключение типа<boost::algorithm::not_enough_input>.

Если<unhex>содержит какие-либо не шестнадцатеричные символы, то бросается исключение типа<boost::algorithm::non_hex_input>.

Если вы хотите уловить все ошибки декодирования, вы можете уловить исключения типа<boost::algorithm::hex_decode_error>.

Examples

Предполагая, что<out>является итератором, который принимает<char>значения, и<wout>принимает<wchar_t>значения (и этот размер ( wchar_t) == 2)

hex ( "abcdef", out )  --> "616263646566"
hex ( "32", out )     --> "3332"
hex ( "abcdef", wout ) --> "006100620063006400650066"
hex ( "32", wout )    --> "00330032"
unhex ( "616263646566", out )  --> "abcdef"
unhex ( "3332", out )          --> "32"
unhex ( "616263646566", wout ) --> "\6162\6364\6566"	( i.e, a 3 character string )
unhex ( "3332", wout )         --> "\3233"				( U+3332, SQUARE HUARADDO )
unhex ( "3", out )            --> Error - not enough input
unhex ( "32", wout )          --> Error - not enough input
unhex ( "ACEG", out )         --> Error - non-hex input

Iterator Requirements

<hex>и<unhex>работают на всех типах итераторов.

Complexity

Все варианты<hex>и<unhex>выполняются вO(N)(линейное) время; то есть они обрабатывают каждый элемент во входной последовательности один раз.

Exception Safety

Все варианты<hex>и<unhex>берут свои параметры по стоимости или по ссылке и не зависят от какого-либо глобального состояния. Таким образом, все процедуры в этом файле обеспечивают сильную гарантию исключения. Однако при работе с итераторами ввода, если выкинуто исключение, итераторы ввода не будут сбрасывать свои исходные значения (т.е. символы, прочитанные из итератора, не могут быть непрочитаны).

Notes
  • <hex>и<unhex>ничего не делают, когда проходят пустые диапазоны.

PrevUpHomeNext

Статья hex раздела The Boost Algorithm Library Other Algorithms может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Other Algorithms ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:32:35/0.0071358680725098/0