Browse Source

add uint32_read interface.

master
Felix von Leitner 19 years ago
parent
commit
3f95e1de00
  1. 9
      uint/uint32_read.c
  2. 9
      uint/uint32_read_big.c
  3. 35
      uint32.h

9
uint/uint32_read.c

@ -0,0 +1,9 @@
#define NO_UINT32_MACROS
#include "uint32.h"
uint32 uint32_read(const char *in) {
return (((uint32)(unsigned char)in[3])<<24) |
(((uint32)(unsigned char)in[2])<<16) |
(((uint32)(unsigned char)in[1])<<8) |
(uint32)(unsigned char)in[0];
}

9
uint/uint32_read_big.c

@ -0,0 +1,9 @@
#define NO_UINT32_MACROS
#include "uint32.h"
uint32 uint32_read_big(const char *in) {
return (((uint32)(unsigned char)in[0])<<24) |
(((uint32)(unsigned char)in[1])<<16) |
(((uint32)(unsigned char)in[2])<<8) |
(uint32)(unsigned char)in[3];
}

35
uint32.h

@ -3,40 +3,21 @@
typedef unsigned int uint32;
#ifndef __linux__
#define NO_UINT32_MACROS
#endif
#ifdef NO_UINT32_MACROS
extern void uint32_pack(char *out,uint32 in);
extern void uint32_pack_big(char *out,uint32 in);
extern void uint32_unpack(const char *in,uint32* out);
extern void uint32_unpack_big(const char *in,uint32* out);
#else
#include <endian.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
#if defined(__i386__) && !defined(NO_UINT32_MACROS)
#define uint32_pack(out,in) (*(uint32*)(out)=(in))
extern void uint32_pack_big(char *out,uint32 in);
#define uint32_unpack(in,out) (*(out)=*(uint32*)(in))
#define uint32_read(in) (*(uint32*)in)
extern void uint32_pack_big(char *out,uint32 in);
extern void uint32_unpack_big(const char *in,uint32* out);
extern uint32 uint32_read_big(const char *in);
#else
extern void uint32_pack(char *out,uint32 in);
#define uint32_pack_big(out,in) (*(uint32*)(out)=(in))
extern void uint32_pack_big(char *out,uint32 in);
extern void uint32_unpack(const char *in,uint32* out);
#define uint32_unpack_big(in,out) (*(out)=*(uint32*)(in))
#endif
extern void uint32_unpack_big(const char *in,uint32* out);
extern uint32 uint32_read(const char *in);
extern uint32 uint32_read_big(const char *in);
#endif

Loading…
Cancel
Save