DYT/Tool/3rdParty_x64/include/dcmtk/dcmdata/dcswap.h
2024-11-22 23:19:31 +08:00

86 lines
2.4 KiB
C

/*
*
* Copyright (C) 1994-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmdata
*
* Author: Andreas Barth
*
* Purpose: byte order functions
*
*/
#ifndef DCSWAP_H
#define DCSWAP_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmdata/dcerror.h"
#include "dcmtk/dcmdata/dcxfer.h" /* for E_ByteOrder */
/** swap block of data from big-endian to little-endian or back if neccessary
* @param newByteOrder desired byte order of data block
* @param oldByteOrder current byte order of data block
* @param value pointer to block of data
* @param byteLength size of data block in bytes
* @param valWidth size of each value in the data block, in bytes
* @return EC_Normal if successful, an error code otherwise
*/
DCMTK_DCMDATA_EXPORT OFCondition swapIfNecessary(
const E_ByteOrder newByteOrder,
const E_ByteOrder oldByteOrder,
void * value,
const Uint32 byteLength,
const size_t valWidth);
/** swap block of data from big-endian to little-endian or back
* @param value pointer to block of data
* @param byteLength size of data block in bytes
* @param valWidth size of each value in the data block, in bytes
*/
DCMTK_DCMDATA_EXPORT void swapBytes(
void * value,
const Uint32 byteLength,
const size_t valWidth);
/** swap an Uint16 number from big-endian to little-endian or back
* @param toSwap number to be swapped
* @return swapped number
*/
DCMTK_DCMDATA_EXPORT Uint16 swapShort(const Uint16 toSwap);
/** swap a sequence of two bytes from big-endian to little-endian or back
* @param toSwap pointer to object to swap
*/
inline void swap2Bytes(Uint8 * toSwap)
// swaps [byte0][byte1] to [byte1][byte0]
{
Uint8 tmp = toSwap[0];
toSwap[0] = toSwap[1];
toSwap[1] = tmp;
}
/** swap a sequence of four bytes from big-endian to little-endian or back
* @param toSwap pointer to object to swap
*/
inline void swap4Bytes(Uint8 * toSwap)
// swaps [byte0][byte1][byte2][byte3] to [byte3][byte2][byte1][byte0]
{
Uint8 tmp = toSwap[0];
toSwap[0] = toSwap[3];
toSwap[3] = tmp;
tmp = toSwap[1];
toSwap[1] = toSwap[2];
toSwap[2] = tmp;
}
#endif // DCSWAP_H