Sese Framework  x.y.z
A cross-platform framework
载入中...
搜索中...
未找到
Endian.h 文件参考

字节序转换 更多...

#include <type_traits>
#include <cstring>
#include <cstdint>

浏览该文件的源代码.

宏定义

#define ByteSwap16(i16)   ((i16 & 0x00FF) << 8 | (i16 & 0xFF00) >> 8)
 
#define ByteSwap32(i32)   ((i32 & 0x000000FF) << 24 | (i32 & 0x0000FF00) << 8 | (i32 & 0x00FF0000) >> 8 | (i32 & 0xFF000000) >> 24)
 
#define ByteSwap64(i64)
 
#define SESE_LITTLE_ENDIAN
 
#define ASSERT_FLOAT_SIZE   static_assert(sizeof(float) == 4, "Float size is not 4 bytes")
 
#define ASSERT_DOUBLE_SIZE   static_assert(sizeof(double) == 8, "Double size is not 8 bytes")
 

枚举

enum class  EndianType { LITTLE , BIG }
 

函数

template<typename T >
ToBigEndian16 (T t)
 
template<typename T >
ToBigEndian32 (T t)
 
template<typename T >
ToBigEndian64 (T t)
 
template<typename T >
ToLittleEndian16 (T t)
 
template<typename T >
ToLittleEndian32 (T t)
 
template<typename T >
ToLittleEndian64 (T t)
 
template<typename T >
FromBigEndian16 (T t)
 
template<typename T >
FromBigEndian32 (T t)
 
template<typename T >
FromBigEndian64 (T t)
 
template<typename T >
FromLittleEndian16 (T t)
 
template<typename T >
FromLittleEndian32 (T t)
 
template<typename T >
FromLittleEndian64 (T t)
 
template<typename T >
std::enable_if< sizeof(T)==2, T >::t ToBigEndian (T t)
 
template<typename T >
std::enable_if< sizeof(T)==4, T >::t ToBigEndian (T t)
 
template<typename T >
std::enable_if< sizeof(T)==8, T >::t ToBigEndian (T t)
 
template<typename T >
ToLittleEndian (T t)
 
template<typename T >
std::enable_if< sizeof(T)==2, T >::t FromBigEndian (T t)
 
template<typename T >
std::enable_if< sizeof(T)==4, T >::t FromBigEndian (T t)
 
template<typename T >
std::enable_if< sizeof(T)==8, T >::t FromBigEndian (T t)
 
template<typename T >
FromLittleEndian (T t)
 
template<>
float ToBigEndian32 (float t)
 
template<>
double ToBigEndian64 (double t)
 
template<>
float ToLittleEndian32 (float t)
 
template<>
double ToLittleEndian64 (double t)
 
template<>
float FromBigEndian32 (float t)
 
template<>
double FromBigEndian64 (double t)
 
template<>
float FromLittleEndian32 (float t)
 
template<>
double FromLittleEndian64 (double t)
 

详细描述

字节序转换

作者
kaoru
日期
2022年4月3日

宏定义说明

◆ ASSERT_DOUBLE_SIZE

#define ASSERT_DOUBLE_SIZE   static_assert(sizeof(double) == 8, "Double size is not 8 bytes")

◆ ASSERT_FLOAT_SIZE

#define ASSERT_FLOAT_SIZE   static_assert(sizeof(float) == 4, "Float size is not 4 bytes")

◆ ByteSwap16

#define ByteSwap16 ( i16)    ((i16 & 0x00FF) << 8 | (i16 & 0xFF00) >> 8)

◆ ByteSwap32

#define ByteSwap32 ( i32)    ((i32 & 0x000000FF) << 24 | (i32 & 0x0000FF00) << 8 | (i32 & 0x00FF0000) >> 8 | (i32 & 0xFF000000) >> 24)

◆ ByteSwap64

#define ByteSwap64 ( i64)
值:
((i64 & 0x00000000000000FF) << 56 | \
(i64 & 0x000000000000FF00) << 40 | \
(i64 & 0x0000000000FF0000) << 24 | \
(i64 & 0x00000000FF000000) << 8 | \
(i64 & 0x000000FF00000000) >> 8 | \
(i64 & 0x0000FF0000000000) >> 24 | \
(i64 & 0x00FF000000000000) >> 40 | \
(i64 & 0xFF00000000000000) >> 56)

被这些函数引用 FromBigEndian(), FromBigEndian64(), ToBigEndian() , 以及 ToBigEndian64().

◆ SESE_LITTLE_ENDIAN

#define SESE_LITTLE_ENDIAN

枚举类型说明

◆ EndianType

enum class EndianType
strong
枚举值
LITTLE 
BIG 

函数说明

◆ FromBigEndian() [1/3]

template<typename T >
std::enable_if< sizeof(T)==2, T >::t FromBigEndian ( T t)
inline

引用了 ByteSwap16.

◆ FromBigEndian() [2/3]

template<typename T >
std::enable_if< sizeof(T)==4, T >::t FromBigEndian ( T t)
inline

引用了 ByteSwap32.

◆ FromBigEndian() [3/3]

template<typename T >
std::enable_if< sizeof(T)==8, T >::t FromBigEndian ( T t)
inline

引用了 ByteSwap64.

◆ FromBigEndian16()

◆ FromBigEndian32() [1/2]

template<>
float FromBigEndian32 ( float t)
inline

引用了 ASSERT_FLOAT_SIZE , 以及 FromBigEndian32().

◆ FromBigEndian32() [2/2]

◆ FromBigEndian64() [1/2]

template<>
double FromBigEndian64 ( double t)
inline

◆ FromBigEndian64() [2/2]

template<typename T >
T FromBigEndian64 ( T t)
inline

引用了 ByteSwap64.

被这些函数引用 FromBigEndian64() , 以及 FromLittleEndian64().

◆ FromLittleEndian()

template<typename T >
T FromLittleEndian ( T t)
inline

◆ FromLittleEndian16()

template<typename T >
T FromLittleEndian16 ( T t)
inline

◆ FromLittleEndian32() [1/2]

template<>
float FromLittleEndian32 ( float t)
inline

引用了 ASSERT_FLOAT_SIZE , 以及 FromBigEndian32().

◆ FromLittleEndian32() [2/2]

template<typename T >
T FromLittleEndian32 ( T t)
inline

◆ FromLittleEndian64() [1/2]

template<>
double FromLittleEndian64 ( double t)
inline

◆ FromLittleEndian64() [2/2]

template<typename T >
T FromLittleEndian64 ( T t)
inline

◆ ToBigEndian() [1/3]

template<typename T >
std::enable_if< sizeof(T)==2, T >::t ToBigEndian ( T t)
inline

引用了 ByteSwap16.

◆ ToBigEndian() [2/3]

template<typename T >
std::enable_if< sizeof(T)==4, T >::t ToBigEndian ( T t)
inline

引用了 ByteSwap32.

◆ ToBigEndian() [3/3]

template<typename T >
std::enable_if< sizeof(T)==8, T >::t ToBigEndian ( T t)
inline

引用了 ByteSwap64.

◆ ToBigEndian16()

◆ ToBigEndian32() [1/2]

template<>
float ToBigEndian32 ( float t)
inline

引用了 ASSERT_FLOAT_SIZE , 以及 ToBigEndian32().

◆ ToBigEndian32() [2/2]

◆ ToBigEndian64() [1/2]

template<>
double ToBigEndian64 ( double t)
inline

引用了 ASSERT_DOUBLE_SIZE , 以及 ToBigEndian64().

◆ ToBigEndian64() [2/2]

template<typename T >
T ToBigEndian64 ( T t)
inline

◆ ToLittleEndian()

template<typename T >
T ToLittleEndian ( T t)
inline

被这些函数引用 sese::SHA256Util::encode().

◆ ToLittleEndian16()

template<typename T >
T ToLittleEndian16 ( T t)
inline

被这些函数引用 sese::MemoryViewer::peer16().

◆ ToLittleEndian32() [1/2]

template<>
float ToLittleEndian32 ( float t)
inline

引用了 ASSERT_FLOAT_SIZE , 以及 ToBigEndian32().

◆ ToLittleEndian32() [2/2]

template<typename T >
T ToLittleEndian32 ( T t)
inline

◆ ToLittleEndian64() [1/2]

template<>
double ToLittleEndian64 ( double t)
inline

引用了 ASSERT_DOUBLE_SIZE , 以及 ToBigEndian64().

◆ ToLittleEndian64() [2/2]

template<typename T >
T ToLittleEndian64 ( T t)
inline

被这些函数引用 sese::MD5Util::encode() , 以及 sese::MemoryViewer::peer64().