xref: /netbsd-src/share/man/man9/byteorder.9 (revision e97f745b4f7650281ffb7ebab465197fc1277843)
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