Mercurial > hg > th-libs
view th_endian.c @ 0:bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
here, because it's cluttered and commit messages are mostly crap.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 26 Mar 2008 04:41:58 +0200 |
parents | |
children | 8552edc844a7 |
line wrap: on
line source
/* * Endianess handling * Programmed and designed by Matti 'ccr' Hamalainen * (C) Copyright 2002-2007 Tecnic Software productions (TNSP) * * Please read file 'COPYING' for information on license and distribution. */ #include "th_endian.h" #include <stdio.h> /* * Endianess conversion routines */ #ifdef TH_BIGENDIAN /* Convert to from Small Endian */ void TH_NE16(uint16_t * iVal) { uint16_t r = *iVal; *iVal = ((r & 0xff) << 8) | ((r >> 8) & 0xff); } void TH_NE32(uint32_t * iVal) { uint32_t r = *iVal; *iVal = ((r & 0xff) << 8) | ((r >> 8) & 0xff) | ((r & 0x00ff0000L) << 8) | ((r >> 8) & 0x00ff0000L); } /* Convert to Small/Little Endian */ uint16_t TH_LE16(uint16_t iVal) { return ((iVal & 0xff) << 8) | ((iVal >> 8) & 0xff); } uint32_t TH_LE32(uint32_t iVal) { return ((iVal & 0xff) << 8) | ((iVal >> 8) & 0xff) | ((iVal & 0x00ff0000L) << 8) | ((iVal >> 8) & 0x00ff0000L); } #endif /* TH_BIGENDIAN */ /* * File routines for endian-dependant data */ #define TH_FILE FILE #define TH_FREAD fread #define TH_FGETC fgetc #define TH_RNAME(X) TH_READ_##X #define TH_CODE_ENDIAN2 #include "th_endian2.h" #undef TH_CODE_ENDIAN2 BOOL TH_WRITE_STR(FILE * f, uint8_t * s, size_t l) { return (fwrite(s, sizeof(uint8_t), l, f) == l); } void TH_WRITE_BE16(FILE * f, uint16_t v) { fputc((v >> 8) & 0xFF, f); fputc(v & 0xFF, f); } void TH_WRITE_BE32(FILE * f, uint32_t v) { fputc((v >> 24) & 0xFF, f); fputc((v >> 16) & 0xFF, f); fputc((v >> 8) & 0xFF, f); fputc(v & 0xFF, f); } void TH_WRITE_LE16(FILE * f, uint16_t v) { fputc(v & 0xFF, f); fputc((v >> 8) & 0xFF, f); } void TH_WRITE_LE32(FILE * f, uint32_t v) { fputc(v & 0xFF, f); fputc((v >> 8) & 0xFF, f); fputc((v >> 16) & 0xFF, f); fputc((v >> 24) & 0xFF, f); }