Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
byteswap.c
Abstract:
This module defines functions for performing endian conversions.
Author:
Forrest Foltz (forrestf) 10-Dec-1997
Revision History:
--*/
#include "nt.h"
#include "ntrtlp.h"
#undef RtlUshortByteSwap
USHORT FASTCALL RtlUshortByteSwap( IN USHORT Source )
/*++
Routine Description:
The RtlUshortByteSwap function exchanges bytes 0 and 1 of Source and returns the resulting USHORT.
Arguments:
Source - 16-bit value to byteswap.
Return Value:
Swapped 16-bit value.
--*/ { USHORT swapped;
swapped = ((Source) << (8 * 1)) | ((Source) >> (8 * 1));
return swapped; }
#undef RtlUlongByteSwap
ULONG FASTCALL RtlUlongByteSwap( IN ULONG Source )
/*++
Routine Description:
The RtlUlongByteSwap function exchanges byte pairs 0:3 and 1:2 of Source and returns the resulting ULONG.
Arguments:
Source - 32-bit value to byteswap.
Return Value:
Swapped 32-bit value.
--*/ { ULONG swapped;
swapped = ((Source) << (8 * 3)) | ((Source & 0x0000FF00) << (8 * 1)) | ((Source & 0x00FF0000) >> (8 * 1)) | ((Source) >> (8 * 3));
return swapped; }
#undef RtlUlonglongByteSwap
ULONGLONG FASTCALL RtlUlonglongByteSwap( IN ULONGLONG Source )
/*++
Routine Description:
The RtlUlongByteSwap function exchanges byte pairs 0:7, 1:6, 2:5, and 3:4 of Source and returns the resulting ULONGLONG.
Arguments:
Source - 64-bit value to byteswap.
Return Value:
Swapped 64-bit value.
--*/ { ULONGLONG swapped;
swapped = ((Source) << (8 * 7)) | ((Source & 0x000000000000FF00) << (8 * 5)) | ((Source & 0x0000000000FF0000) << (8 * 3)) | ((Source & 0x00000000FF000000) << (8 * 1)) | ((Source & 0x000000FF00000000) >> (8 * 1)) | ((Source & 0x0000FF0000000000) >> (8 * 3)) | ((Source & 0x00FF000000000000) >> (8 * 5)) | ((Source) >> (8 * 7));
return swapped; }
|