1*e97f745bSchristos.\" $NetBSD: byteorder.9,v 1.11 2017/10/16 15:48:14 christos Exp $ 2ef7be3acStsutsui.\" 3ef7be3acStsutsui.\" Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org> 4ef7be3acStsutsui.\" All rights reserved. 5ef7be3acStsutsui.\" 6ef7be3acStsutsui.\" Redistribution and use in source and binary forms, with or without 7ef7be3acStsutsui.\" modification, are permitted provided that the following conditions 8ef7be3acStsutsui.\" are met: 9ef7be3acStsutsui.\" 1. Redistributions of source code must retain the above copyright 10ef7be3acStsutsui.\" notice, this list of conditions and the following disclaimer. 11ef7be3acStsutsui.\" 2. Redistributions in binary form must reproduce the above copyright 12ef7be3acStsutsui.\" notice, this list of conditions and the following disclaimer in the 13ef7be3acStsutsui.\" documentation and/or other materials provided with the distribution. 14ef7be3acStsutsui.\" 15ef7be3acStsutsui.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16ef7be3acStsutsui.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17ef7be3acStsutsui.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18ef7be3acStsutsui.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19ef7be3acStsutsui.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20ef7be3acStsutsui.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21ef7be3acStsutsui.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22ef7be3acStsutsui.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23ef7be3acStsutsui.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24ef7be3acStsutsui.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25ef7be3acStsutsui.\" SUCH DAMAGE. 26ef7be3acStsutsui.\" 27ef7be3acStsutsui.\" $FreeBSD: src/share/man/man9/byteorder.9,v 1.6 2003/05/21 17:32:55 ru Exp $ 28ef7be3acStsutsui.\" 2915a89934Swiz.Dd October 16, 2017 30ef7be3acStsutsui.Dt BYTEORDER 9 31ef7be3acStsutsui.Os 32ef7be3acStsutsui.Sh NAME 33ef7be3acStsutsui.Nm bswap16 , 34ef7be3acStsutsui.Nm bswap32 , 35ef7be3acStsutsui.Nm bswap64 , 36ef7be3acStsutsui.Nm be16toh , 37ef7be3acStsutsui.Nm be32toh , 38ef7be3acStsutsui.Nm be64toh , 39ef7be3acStsutsui.Nm htobe16 , 40ef7be3acStsutsui.Nm htobe32 , 41ef7be3acStsutsui.Nm htobe64 , 42ef7be3acStsutsui.Nm htole16 , 43ef7be3acStsutsui.Nm htole32 , 44ef7be3acStsutsui.Nm htole64 , 45ef7be3acStsutsui.Nm le16toh , 46ef7be3acStsutsui.Nm le32toh , 47ef7be3acStsutsui.Nm le64toh , 48ef7be3acStsutsui.Nm be16enc , 49ef7be3acStsutsui.Nm be16dec , 50ef7be3acStsutsui.Nm be32enc , 51ef7be3acStsutsui.Nm be32dec , 52ef7be3acStsutsui.Nm be64enc , 53ef7be3acStsutsui.Nm be64dec , 54ef7be3acStsutsui.Nm le16enc , 55ef7be3acStsutsui.Nm le16dec , 56ef7be3acStsutsui.Nm le32enc , 57ef7be3acStsutsui.Nm le32dec , 58ef7be3acStsutsui.Nm le64enc , 59ef7be3acStsutsui.Nm le64dec 60ef7be3acStsutsui.Nd byte order operations 61ef7be3acStsutsui.Sh SYNOPSIS 62*e97f745bSchristos.In sys/endian.h 63ef7be3acStsutsui.Ft uint16_t 64ef7be3acStsutsui.Fn bswap16 "uint16_t int16" 65ef7be3acStsutsui.Ft uint32_t 66ef7be3acStsutsui.Fn bswap32 "uint32_t int32" 67ef7be3acStsutsui.Ft uint64_t 68ef7be3acStsutsui.Fn bswap64 "uint64_t int64" 69ef7be3acStsutsui.Ft uint16_t 70ef7be3acStsutsui.Fn be16toh "uint16_t big16" 71ef7be3acStsutsui.Ft uint32_t 72ef7be3acStsutsui.Fn be32toh "uint32_t big32" 73ef7be3acStsutsui.Ft uint64_t 74ef7be3acStsutsui.Fn be64toh "uint64_t big64" 75ef7be3acStsutsui.Ft uint16_t 76ef7be3acStsutsui.Fn htobe16 "uint16_t host16" 77ef7be3acStsutsui.Ft uint32_t 78ef7be3acStsutsui.Fn htobe32 "uint32_t host32" 79ef7be3acStsutsui.Ft uint64_t 80ef7be3acStsutsui.Fn htobe64 "uint64_t host64" 81ef7be3acStsutsui.Ft uint16_t 82ef7be3acStsutsui.Fn htole16 "uint16_t host16" 83ef7be3acStsutsui.Ft uint32_t 84ef7be3acStsutsui.Fn htole32 "uint32_t host32" 85ef7be3acStsutsui.Ft uint64_t 86ef7be3acStsutsui.Fn htole64 "uint64_t host64" 87ef7be3acStsutsui.Ft uint16_t 88ef7be3acStsutsui.Fn le16toh "uint16_t little16" 89ef7be3acStsutsui.Ft uint32_t 90ef7be3acStsutsui.Fn le32toh "uint32_t little32" 91ef7be3acStsutsui.Ft uint64_t 92ef7be3acStsutsui.Fn le64toh "uint64_t little64" 93ef7be3acStsutsui.Ft uint16_t 94ef7be3acStsutsui.Fn be16dec "const void *stream" 95ef7be3acStsutsui.Ft uint32_t 96ef7be3acStsutsui.Fn be32dec "const void *stream" 97ef7be3acStsutsui.Ft uint64_t 98ef7be3acStsutsui.Fn be64dec "const void *stream" 99ef7be3acStsutsui.Ft uint16_t 100ef7be3acStsutsui.Fn le16dec "const void *stream" 101ef7be3acStsutsui.Ft uint32_t 102ef7be3acStsutsui.Fn le32dec "const void *stream" 103ef7be3acStsutsui.Ft uint64_t 104ef7be3acStsutsui.Fn le64dec "const void *stream" 105ef7be3acStsutsui.Ft void 106ef7be3acStsutsui.Fn be16enc "void *stream" "uint16_t host16" 107ef7be3acStsutsui.Ft void 108ef7be3acStsutsui.Fn be32enc "void *stream" "uint32_t host32" 109ef7be3acStsutsui.Ft void 110ef7be3acStsutsui.Fn be64enc "void *stream" "uint64_t host64" 111ef7be3acStsutsui.Ft void 112ef7be3acStsutsui.Fn le16enc "void *stream" "uint16_t host16" 113ef7be3acStsutsui.Ft void 114ef7be3acStsutsui.Fn le32enc "void *stream" "uint32_t host32" 115ef7be3acStsutsui.Ft void 116ef7be3acStsutsui.Fn le64enc "void *stream" "uint64_t host64" 117ef7be3acStsutsui.Sh DESCRIPTION 118ef7be3acStsutsuiThe 119ef7be3acStsutsui.Fn bswap16 , 120ef7be3acStsutsui.Fn bswap32 , 121ef7be3acStsutsuiand 122ef7be3acStsutsui.Fn bswap64 123ef7be3acStsutsuifunctions return a byte order swapped integer. 124ef7be3acStsutsuiOn big endian systems, the number is converted to little endian byte order. 125ef7be3acStsutsuiOn little endian systems, the number is converted to big endian byte order. 126ef7be3acStsutsui.Pp 127ef7be3acStsutsuiThe 128ef7be3acStsutsui.Fn be16toh , 129ef7be3acStsutsui.Fn be32toh , 130ef7be3acStsutsuiand 131ef7be3acStsutsui.Fn be64toh 132ef7be3acStsutsuifunctions return a big endian byte ordered integer 133ef7be3acStsutsuiconverted to the system's native byte order. 134ef7be3acStsutsuiThe return value will be the same as the argument on big endian systems. 135ef7be3acStsutsui.Pp 136ef7be3acStsutsuiThe 137ef7be3acStsutsui.Fn le16toh , 138ef7be3acStsutsui.Fn le32toh , 139ef7be3acStsutsuiand 140ef7be3acStsutsui.Fn le64toh 141ef7be3acStsutsuifunctions return a little endian byte ordered integer 142ef7be3acStsutsuiconverted to the system's native byte order. 143ef7be3acStsutsuiThe return value will be the same as the argument on little endian systems. 144ef7be3acStsutsui.Pp 145ef7be3acStsutsuiThe 146ef7be3acStsutsui.Fn htobe16 , 147ef7be3acStsutsui.Fn htobe32 , 148ef7be3acStsutsuiand 149ef7be3acStsutsui.Fn htobe64 150c108d28fSceggerfunctions return an integer in the system's native 151ef7be3acStsutsuibyte order converted to big endian byte order. 152ef7be3acStsutsuiThe return value will be the same as the argument on big endian systems. 153ef7be3acStsutsui.Pp 154ef7be3acStsutsuiThe 155ef7be3acStsutsui.Fn htole16 , 156ef7be3acStsutsui.Fn htole32 , 157ef7be3acStsutsuiand 158ef7be3acStsutsui.Fn htole64 159c108d28fSceggerfunctions return an integer in the system's native 160ef7be3acStsutsuibyte order converted to little endian byte order. 161ef7be3acStsutsuiThe return value will be the same as the argument on little endian systems. 162ef7be3acStsutsui.Pp 163ef7be3acStsutsuiThe 164ef7be3acStsutsui.Fn be16enc , 165ef7be3acStsutsui.Fn be16dec , 166ef7be3acStsutsui.Fn be32enc , 167ef7be3acStsutsui.Fn be32dec , 168ef7be3acStsutsui.Fn be64enc , 169ef7be3acStsutsui.Fn be64dec , 170ef7be3acStsutsui.Fn le16enc , 171ef7be3acStsutsui.Fn le16dec , 172ef7be3acStsutsui.Fn le32enc , 173ef7be3acStsutsui.Fn le32dec , 174ef7be3acStsutsui.Fn le64enc , 175ef7be3acStsutsuiand 176ef7be3acStsutsui.Fn le64dec 177ef7be3acStsutsuifunctions encode and decode integers to/from octet stream 178ef7be3acStsutsuion any alignment in big/little endian format. 179ef7be3acStsutsui.Sh SEE ALSO 1800802a57bSjruoho.Xr bswap 3 , 181ef7be3acStsutsui.Xr byteorder 3 182ef7be3acStsutsui.Sh HISTORY 183ef7be3acStsutsuiThe 184ef7be3acStsutsui.Fn hto* 185ef7be3acStsutsuiand 18620bc9248Stsutsui.Fn *toh 187ef7be3acStsutsuifunctions first appeared in 188ef7be3acStsutsui.Nx 1.5 . 1890802a57bSjruohoThese were later ported to 1900802a57bSjruoho.Fx 5.0 . 19115a89934SwizThese functions were originally introduced to handle PCI bus master 19215a89934Swizdevices that (via DMA) transfer little endian data even on big 19315a89934Swizendian systems. 194ef7be3acStsutsui.Pp 195ef7be3acStsutsuiThe encode/decode functions first appeared in 1960802a57bSjruoho.Fx 5.1 . 1970802a57bSjruohoThese were later ported to 198ef7be3acStsutsui.Nx 3.0 1990802a57bSjruohoas a part of the 200ef7be3acStsutsui.Xr uuidgen 2 201ef7be3acStsutsuisupport. 202