1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Binary Big Endianness Parsers</title> 5<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../../../index.html" title="Spirit 2.5.8"> 8<link rel="up" href="../binary.html" title="Binary Parsers"> 9<link rel="prev" href="binary_little.html" title="Binary Little Endianness Parser"> 10<link rel="next" href="../char.html" title="Character Parsers"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="binary_little.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../char.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h5 class="title"> 27<a name="spirit.qi.reference.binary.binary_big"></a><a class="link" href="binary_big.html" title="Binary Big Endianness Parsers">Binary Big 28 Endianness Parsers</a> 29</h5></div></div></div> 30<h6> 31<a name="spirit.qi.reference.binary.binary_big.h0"></a> 32 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.description"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.description">Description</a> 33 </h6> 34<p> 35 Binary big endian parsers are designed to parse binary byte streams that 36 are laid out in big endian. 37 </p> 38<h6> 39<a name="spirit.qi.reference.binary.binary_big.h1"></a> 40 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.header"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.header">Header</a> 41 </h6> 42<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/qi/binary.hpp></span> 43<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi_binary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 44</pre> 45<p> 46 Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. 47 </p> 48<h6> 49<a name="spirit.qi.reference.binary.binary_big.h2"></a> 50 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.namespace"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.namespace">Namespace</a> 51 </h6> 52<div class="informaltable"><table class="table"> 53<colgroup><col></colgroup> 54<thead><tr><th> 55 <p> 56 Name 57 </p> 58 </th></tr></thead> 59<tbody> 60<tr><td> 61 <p> 62 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_word</span> <span class="comment">// 63 alias: boost::spirit::qi::big_word</span></code> 64 </p> 65 </td></tr> 66<tr><td> 67 <p> 68 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_dword</span> <span class="comment">// 69 alias: boost::spirit::qi::big_dword</span></code> 70 </p> 71 </td></tr> 72<tr><td> 73 <p> 74 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_qword</span> <span class="comment">// 75 alias: boost::spirit::qi::big_qword</span></code> 76 </p> 77 </td></tr> 78<tr><td> 79 <p> 80 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_bin_float</span> <span class="comment">// 81 alias: boost::spirit::qi::big_bin_float</span></code> 82 </p> 83 </td></tr> 84<tr><td> 85 <p> 86 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_bin_double</span> <span class="comment">// 87 alias: boost::spirit::qi::big_bin_double</span></code> 88 </p> 89 </td></tr> 90</tbody> 91</table></div> 92<div class="note"><table border="0" summary="Note"> 93<tr> 94<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> 95<th align="left">Note</th> 96</tr> 97<tr><td align="left" valign="top"><p> 98 <code class="computeroutput"><span class="identifier">big_qword</span></code> is only available 99 on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> 100 is defined (i.e. on platforms having native support for <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> 101 <span class="keyword">long</span></code> (64 bit) integer types). 102 </p></td></tr> 103</table></div> 104<h6> 105<a name="spirit.qi.reference.binary.binary_big.h3"></a> 106 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.model_of"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.model_of">Model 107 of</a> 108 </h6> 109<div class="blockquote"><blockquote class="blockquote"><p> 110 <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a> 111 </p></blockquote></div> 112<div class="variablelist"> 113<p class="title"><b>Notation</b></p> 114<dl class="variablelist"> 115<dt><span class="term"><code class="computeroutput"><span class="identifier">w</span></code></span></dt> 116<dd><p> 117 A 16 bit binary value or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy 118 Argument</a> that evaluates to a 16 bit binary value. This value 119 is always in native endian. 120 </p></dd> 121<dt><span class="term"><code class="computeroutput"><span class="identifier">dw</span></code></span></dt> 122<dd><p> 123 A 32 bit binary value or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy 124 Argument</a> that evaluates to a 32 bit binary value. This value 125 is always in native endian. 126 </p></dd> 127<dt><span class="term"><code class="computeroutput"><span class="identifier">qw</span></code></span></dt> 128<dd><p> 129 A 64 bit binary value or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy 130 Argument</a> that evaluates to a 64 bit binary value. This value 131 is always in native endian. 132 </p></dd> 133<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> 134<dd><p> 135 A float binary value or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy 136 Argument</a> that evaluates to a float binary value. This value 137 is always in native endian. 138 </p></dd> 139<dt><span class="term"><code class="computeroutput"><span class="identifier">d</span></code></span></dt> 140<dd><p> 141 A double binary value or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy 142 Argument</a> that evaluates to a double binary value. This value 143 is always in native endian. 144 </p></dd> 145</dl> 146</div> 147<h6> 148<a name="spirit.qi.reference.binary.binary_big.h4"></a> 149 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.expression_semantics"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.expression_semantics">Expression 150 Semantics</a> 151 </h6> 152<p> 153 Semantics of an expression is defined only where it differs from, or 154 is not defined in <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>. 155 </p> 156<div class="informaltable"><table class="table"> 157<colgroup> 158<col> 159<col> 160</colgroup> 161<thead><tr> 162<th> 163 <p> 164 Expression 165 </p> 166 </th> 167<th> 168 <p> 169 Description 170 </p> 171 </th> 172</tr></thead> 173<tbody> 174<tr> 175<td> 176 <p> 177 <code class="computeroutput"><span class="identifier">big_word</span></code> 178 </p> 179 </td> 180<td> 181 <p> 182 Matches any 16 bit big endian binary. 183 </p> 184 </td> 185</tr> 186<tr> 187<td> 188 <p> 189 <code class="computeroutput"><span class="identifier">big_dword</span></code> 190 </p> 191 </td> 192<td> 193 <p> 194 Matches any 32 bit big endian binary. 195 </p> 196 </td> 197</tr> 198<tr> 199<td> 200 <p> 201 <code class="computeroutput"><span class="identifier">big_qword</span></code> 202 </p> 203 </td> 204<td> 205 <p> 206 Matches any 64 bit big endian binary. 207 </p> 208 </td> 209</tr> 210<tr> 211<td> 212 <p> 213 <code class="computeroutput"><span class="identifier">big_bin_float</span></code> 214 </p> 215 </td> 216<td> 217 <p> 218 Matches any float big endian binary. 219 </p> 220 </td> 221</tr> 222<tr> 223<td> 224 <p> 225 <code class="computeroutput"><span class="identifier">big_bin_double</span></code> 226 </p> 227 </td> 228<td> 229 <p> 230 Matches any double big endian binary. 231 </p> 232 </td> 233</tr> 234<tr> 235<td> 236 <p> 237 <code class="computeroutput"><span class="identifier">big_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> 238 </p> 239 </td> 240<td> 241 <p> 242 Matches an exact 16 bit big endian binary. 243 </p> 244 </td> 245</tr> 246<tr> 247<td> 248 <p> 249 <code class="computeroutput"><span class="identifier">big_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> 250 </p> 251 </td> 252<td> 253 <p> 254 Matches an exact 32 bit big endian binary. 255 </p> 256 </td> 257</tr> 258<tr> 259<td> 260 <p> 261 <code class="computeroutput"><span class="identifier">big_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> 262 </p> 263 </td> 264<td> 265 <p> 266 Matches an exact 32 bit big endian binary. 267 </p> 268 </td> 269</tr> 270<tr> 271<td> 272 <p> 273 <code class="computeroutput"><span class="identifier">big_bin_float</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> 274 </p> 275 </td> 276<td> 277 <p> 278 Matches an exact float big endian binary. 279 </p> 280 </td> 281</tr> 282<tr> 283<td> 284 <p> 285 <code class="computeroutput"><span class="identifier">big_bin_double</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> 286 </p> 287 </td> 288<td> 289 <p> 290 Matches an exact double big endian binary. 291 </p> 292 </td> 293</tr> 294</tbody> 295</table></div> 296<h6> 297<a name="spirit.qi.reference.binary.binary_big.h5"></a> 298 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.attributes"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.attributes">Attributes</a> 299 </h6> 300<div class="informaltable"><table class="table"> 301<colgroup> 302<col> 303<col> 304</colgroup> 305<thead><tr> 306<th> 307 <p> 308 Expression 309 </p> 310 </th> 311<th> 312 <p> 313 Attribute 314 </p> 315 </th> 316</tr></thead> 317<tbody> 318<tr> 319<td> 320 <p> 321 <code class="computeroutput"><span class="identifier">big_word</span></code> 322 </p> 323 </td> 324<td> 325 <p> 326 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least16_t</span></code> 327 </p> 328 </td> 329</tr> 330<tr> 331<td> 332 <p> 333 <code class="computeroutput"><span class="identifier">big_dword</span></code> 334 </p> 335 </td> 336<td> 337 <p> 338 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least32_t</span></code> 339 </p> 340 </td> 341</tr> 342<tr> 343<td> 344 <p> 345 <code class="computeroutput"><span class="identifier">big_qword</span></code> 346 </p> 347 </td> 348<td> 349 <p> 350 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least64_t</span></code> 351 </p> 352 </td> 353</tr> 354<tr> 355<td> 356 <p> 357 <code class="computeroutput"><span class="identifier">big_bin_float</span></code> 358 </p> 359 </td> 360<td> 361 <p> 362 <code class="computeroutput"><span class="keyword">float</span></code> 363 </p> 364 </td> 365</tr> 366<tr> 367<td> 368 <p> 369 <code class="computeroutput"><span class="identifier">big_bin_double</span></code> 370 </p> 371 </td> 372<td> 373 <p> 374 <code class="computeroutput"><span class="keyword">double</span></code> 375 </p> 376 </td> 377</tr> 378<tr> 379<td> 380 <p> 381 <code class="computeroutput"><span class="identifier">big_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> 382 </p> 383 </td> 384<td> 385 <p> 386 <code class="computeroutput"><span class="identifier">unused</span></code> 387 </p> 388 </td> 389</tr> 390<tr> 391<td> 392 <p> 393 <code class="computeroutput"><span class="identifier">big_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> 394 </p> 395 </td> 396<td> 397 <p> 398 <code class="computeroutput"><span class="identifier">unused</span></code> 399 </p> 400 </td> 401</tr> 402<tr> 403<td> 404 <p> 405 <code class="computeroutput"><span class="identifier">big_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> 406 </p> 407 </td> 408<td> 409 <p> 410 <code class="computeroutput"><span class="identifier">unused</span></code> 411 </p> 412 </td> 413</tr> 414<tr> 415<td> 416 <p> 417 <code class="computeroutput"><span class="identifier">big_bin_float</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> 418 </p> 419 </td> 420<td> 421 <p> 422 <code class="computeroutput"><span class="identifier">unused</span></code> 423 </p> 424 </td> 425</tr> 426<tr> 427<td> 428 <p> 429 <code class="computeroutput"><span class="identifier">big_bin_double</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> 430 </p> 431 </td> 432<td> 433 <p> 434 <code class="computeroutput"><span class="identifier">unused</span></code> 435 </p> 436 </td> 437</tr> 438</tbody> 439</table></div> 440<h6> 441<a name="spirit.qi.reference.binary.binary_big.h6"></a> 442 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.complexity"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.complexity">Complexity</a> 443 </h6> 444<div class="blockquote"><blockquote class="blockquote"><p> 445 O(N), where N is the number of bytes parsed 446 </p></blockquote></div> 447<h6> 448<a name="spirit.qi.reference.binary.binary_big.h7"></a> 449 <span class="phrase"><a name="spirit.qi.reference.binary.binary_big.example"></a></span><a class="link" href="binary_big.html#spirit.qi.reference.binary.binary_big.example">Example</a> 450 </h6> 451<div class="note"><table border="0" summary="Note"> 452<tr> 453<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> 454<th align="left">Note</th> 455</tr> 456<tr><td align="left" valign="top"><p> 457 The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.qi.reference.basics.examples">Basics Examples</a> 458 section. 459 </p></td></tr> 460</table></div> 461<p> 462 Using declarations and variables: 463 </p> 464<p> 465</p> 466<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">big_word</span><span class="special">;</span> 467<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">big_dword</span><span class="special">;</span> 468<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">big_qword</span><span class="special">;</span> 469 470<span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint16_t</span> <span class="identifier">us</span><span class="special">;</span> 471<span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint32_t</span> <span class="identifier">ui</span><span class="special">;</span> 472<span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">ul</span><span class="special">;</span> 473</pre> 474<p> 475 </p> 476<p> 477 Basic usage of the big endian binary parsers: 478 </p> 479<p> 480</p> 481<pre class="programlisting"><span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="identifier">big_word</span><span class="special">,</span> <span class="identifier">us</span><span class="special">);</span> <span class="identifier">assert</span><span class="special">(</span><span class="identifier">us</span> <span class="special">==</span> <span class="number">0x0102</span><span class="special">);</span> 482<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="identifier">big_dword</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">);</span> <span class="identifier">assert</span><span class="special">(</span><span class="identifier">ui</span> <span class="special">==</span> <span class="number">0x01020304</span><span class="special">);</span> 483<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> <span class="identifier">big_qword</span><span class="special">,</span> <span class="identifier">ul</span><span class="special">);</span> 484<span class="identifier">assert</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0102030405060708LL</span><span class="special">);</span> 485 486<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="identifier">big_word</span><span class="special">(</span><span class="number">0x0102</span><span class="special">));</span> 487<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="identifier">big_dword</span><span class="special">(</span><span class="number">0x01020304</span><span class="special">));</span> 488<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> 489 <span class="identifier">big_qword</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0102030405060708LL</span><span class="special">));</span> 490</pre> 491<p> 492 </p> 493</div> 494<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 495<td align="left"></td> 496<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p> 497 Distributed under the Boost Software License, Version 1.0. (See accompanying 498 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 499 </p> 500</div></td> 501</tr></table> 502<hr> 503<div class="spirit-nav"> 504<a accesskey="p" href="binary_little.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../char.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 505</div> 506</body> 507</html> 508