以下代码抄自《网络多人游戏架构与编程》,可以支持float、int、double等数据类型数据的大小端转换,测试代码为:
void TestByteSwap()
{
int32_t test = 0x12345678;
float floatTest = 1.f;
printf( "swapped 0x%x is 0x%x\n", test, ByteSwap( test ) );
printf( "swapped %f is %f\n", floatTest, ByteSwap( floatTest ) );
printf( "swapped 0x%x is 0x%x\n", TypeAliaser< float, uint32_t >( floatTest ).Get(), TypeAliaser< float, uint32_t >( ByteSwap( floatTest ) ).Get() );
}
写成模板的形式更加规范一些
inline uint16_t ByteSwap2( uint16_t inData )
{
return ( inData >> 8 ) | ( inData << 8 );
}
inline uint32_t ByteSwap4( uint32_t inData )
{
return ( ( inData >> 24 ) & 0x000000ff ) |
( ( inData >> 8 ) & 0x0000ff00 ) |
( ( inData << 8 ) & 0x00ff0000 ) |
( ( inData << 24 ) & 0xff000000 );
}
inline uint64_t ByteSwap8( uint64_t inData )
{
return ( ( inData &