Reactos
at master 62 lines 1.4 kB view raw
1// 2// byteswap.cpp 3// 4// Copyright (c) Microsoft Corporation. All rights reserved. 5// 6// Defines functions that swap the bytes of an unsigned integer. 7// 8#include <stdlib.h> 9 10 11 12#pragma function(_byteswap_ulong, _byteswap_uint64, _byteswap_ushort) 13 14/*** 15*unsigned long _byteswap_ulong(i) - long byteswap 16* 17*Purpose: 18* Performs a byte swap on an unsigned integer. 19* 20*Entry: 21* unsigned long i: value to swap 22* 23*Exit: 24* returns swaped 25* 26*Exceptions: 27* None. 28* 29*******************************************************************************/ 30 31extern "C" unsigned long __cdecl _byteswap_ulong(unsigned long const i) 32{ 33 unsigned int j; 34 j = (i << 24); 35 j += (i << 8) & 0x00FF0000; 36 j += (i >> 8) & 0x0000FF00; 37 j += (i >> 24); 38 return j; 39} 40 41extern "C" unsigned short __cdecl _byteswap_ushort(unsigned short const i) 42{ 43 unsigned short j; 44 j = (i << 8); 45 j += (i >> 8); 46 return j; 47} 48 49extern "C" unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 const i) 50{ 51 unsigned __int64 j; 52 j = (i << 56); 53 j += (i << 40) & 0x00FF000000000000; 54 j += (i << 24) & 0x0000FF0000000000; 55 j += (i << 8) & 0x000000FF00000000; 56 j += (i >> 8) & 0x00000000FF000000; 57 j += (i >> 24) & 0x0000000000FF0000; 58 j += (i >> 40) & 0x000000000000FF00; 59 j += (i >> 56); 60 return j; 61 62}