SDL 3.0
SDL_endian.h File Reference
+ Include dependency graph for SDL_endian.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

The two types of endianness

CategoryEndian

Functions for reading and writing endian-specific values.

#define SDL_LIL_ENDIAN   1234
 
#define SDL_BIG_ENDIAN   4321
 
#define SDL_BYTEORDER   SDL_LIL_ENDIAN
 
#define SDL_FLOATWORDORDER   SDL_BYTEORDER
 
#define HAS_BUILTIN_BSWAP16   0
 
#define HAS_BUILTIN_BSWAP32   0
 
#define HAS_BUILTIN_BSWAP64   0
 
#define HAS_BROKEN_BSWAP   0
 
#define SDL_Swap16LE(x)   (x)
 
#define SDL_Swap32LE(x)   (x)
 
#define SDL_Swap64LE(x)   (x)
 
#define SDL_SwapFloatLE(x)   (x)
 
#define SDL_Swap16BE(x)   SDL_Swap16(x)
 
#define SDL_Swap32BE(x)   SDL_Swap32(x)
 
#define SDL_Swap64BE(x)   SDL_Swap64(x)
 
#define SDL_SwapFloatBE(x)   SDL_SwapFloat(x)
 
SDL_FORCE_INLINE Uint16 SDL_Swap16 (Uint16 x)
 
SDL_FORCE_INLINE Uint32 SDL_Swap32 (Uint32 x)
 
SDL_FORCE_INLINE Uint64 SDL_Swap64 (Uint64 x)
 
SDL_FORCE_INLINE float SDL_SwapFloat (float x)
 

Macro Definition Documentation

◆ HAS_BROKEN_BSWAP

#define HAS_BROKEN_BSWAP   0

Definition at line 147 of file SDL_endian.h.

◆ HAS_BUILTIN_BSWAP16

#define HAS_BUILTIN_BSWAP16   0

Definition at line 144 of file SDL_endian.h.

◆ HAS_BUILTIN_BSWAP32

#define HAS_BUILTIN_BSWAP32   0

Definition at line 145 of file SDL_endian.h.

◆ HAS_BUILTIN_BSWAP64

#define HAS_BUILTIN_BSWAP64   0

Definition at line 146 of file SDL_endian.h.

◆ SDL_BIG_ENDIAN

#define SDL_BIG_ENDIAN   4321

Definition at line 55 of file SDL_endian.h.

◆ SDL_BYTEORDER

#define SDL_BYTEORDER   SDL_LIL_ENDIAN

Definition at line 94 of file SDL_endian.h.

◆ SDL_FLOATWORDORDER

#define SDL_FLOATWORDORDER   SDL_BYTEORDER

Definition at line 117 of file SDL_endian.h.

◆ SDL_LIL_ENDIAN

#define SDL_LIL_ENDIAN   1234

Definition at line 54 of file SDL_endian.h.

◆ SDL_Swap16BE

#define SDL_Swap16BE (   x)    SDL_Swap16(x)

Definition at line 514 of file SDL_endian.h.

◆ SDL_Swap16LE

#define SDL_Swap16LE (   x)    (x)

Definition at line 510 of file SDL_endian.h.

◆ SDL_Swap32BE

#define SDL_Swap32BE (   x)    SDL_Swap32(x)

Definition at line 515 of file SDL_endian.h.

◆ SDL_Swap32LE

#define SDL_Swap32LE (   x)    (x)

Definition at line 511 of file SDL_endian.h.

◆ SDL_Swap64BE

#define SDL_Swap64BE (   x)    SDL_Swap64(x)

Definition at line 516 of file SDL_endian.h.

◆ SDL_Swap64LE

#define SDL_Swap64LE (   x)    (x)

Definition at line 512 of file SDL_endian.h.

◆ SDL_SwapFloatBE

#define SDL_SwapFloatBE (   x)    SDL_SwapFloat(x)

Definition at line 517 of file SDL_endian.h.

◆ SDL_SwapFloatLE

#define SDL_SwapFloatLE (   x)    (x)

Definition at line 513 of file SDL_endian.h.

Function Documentation

◆ SDL_Swap16()

SDL_FORCE_INLINE Uint16 SDL_Swap16 ( Uint16  x)

Definition at line 189 of file SDL_endian.h.

190{
191 return SDL_static_cast(Uint16, ((x << 8) | (x >> 8)));
192}
uint16_t Uint16
Definition SDL_stdinc.h:247
#define SDL_static_cast(type, expression)
Definition SDL_stdinc.h:128

References SDL_static_cast.

◆ SDL_Swap32()

SDL_FORCE_INLINE Uint32 SDL_Swap32 ( Uint32  x)

Definition at line 236 of file SDL_endian.h.

237{
238 return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) |
239 ((x >> 8) & 0x0000FF00) | (x >> 24)));
240}
uint32_t Uint32
Definition SDL_stdinc.h:265

References SDL_static_cast.

Referenced by SDL_Swap64(), and SDL_SwapFloat().

◆ SDL_Swap64()

SDL_FORCE_INLINE Uint64 SDL_Swap64 ( Uint64  x)

Definition at line 279 of file SDL_endian.h.

280{
281 Uint32 hi, lo;
282
283 /* Separate into high and low 32-bit values and swap them */
284 lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
285 x >>= 32;
286 hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
287 x = SDL_Swap32(lo);
288 x <<= 32;
289 x |= SDL_Swap32(hi);
290 return (x);
291}
SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x)
Definition SDL_endian.h:236

References SDL_static_cast, and SDL_Swap32().

◆ SDL_SwapFloat()

SDL_FORCE_INLINE float SDL_SwapFloat ( float  x)

Byte-swap a floating point number.

This will always byte-swap the value, whether it's currently in the native byteorder of the system or not. You should use SDL_SwapFloatLE or SDL_SwapFloatBE instead, in most cases.

Note that this is a forced-inline function in a header, and not a public API function available in the SDL library (which is to say, the code is embedded in the calling program and the linker and dynamic loader will not be able to find this function inside SDL itself).

Parameters
xthe value to byte-swap.
Returns
x, with its bytes in the opposite endian order.

\threadsafety It is safe to call this function from any thread.

Since
This function is available since SDL 3.0.0.

Definition at line 314 of file SDL_endian.h.

315{
316 union {
317 float f;
318 Uint32 ui32;
319 } swapper;
320 swapper.f = x;
321 swapper.ui32 = SDL_Swap32(swapper.ui32);
322 return swapper.f;
323}

References SDL_Swap32().