summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bits.c59
-rw-r--r--bits.h23
2 files changed, 39 insertions, 43 deletions
diff --git a/bits.c b/bits.c
index df8275f6..8c31e79a 100644
--- a/bits.c
+++ b/bits.c
@@ -5,8 +5,7 @@
#include <string.h>
#include "bits.h"
-int main (int argc, char *argv[])
-
+int main(void)
{
unsigned char buf[80];
union int_float i_f;
@@ -27,51 +26,51 @@ int main (int argc, char *argv[])
memcpy(buf+16,"\x40\x09\x21\xfb\x54\x44\x2d\x18",8);
memcpy(buf+24,"\x40\x49\x0f\xdb",4);
- sb1 = getsb(0);
- sb2 = getsb(8);
- ub1 = getub(0);
- ub2 = getub(8);
- sw1 = getsw(0);
- sw2 = getsw(8);
- uw1 = getuw(0);
- uw2 = getuw(8);
- sl1 = getsl(0);
- sl2 = getsl(8);
- ul1 = getul(0);
- ul2 = getul(8);
- sL1 = getsL(0);
- sL2 = getsL(8);
- uL1 = getuL(0);
- uL2 = getuL(8);
- f1 = getf(24);
- d1 = getd(16);
+ sb1 = getsb(buf, 0);
+ sb2 = getsb(buf, 8);
+ ub1 = getub(buf, 0);
+ ub2 = getub(buf, 8);
+ sw1 = getsw(buf, 0);
+ sw2 = getsw(buf, 8);
+ uw1 = getuw(buf, 0);
+ uw2 = getuw(buf, 8);
+ sl1 = getsl(buf, 0);
+ sl2 = getsl(buf, 8);
+ ul1 = getul(buf, 0);
+ ul2 = getul(buf, 8);
+ sL1 = getsL(buf, 0);
+ sL2 = getsL(buf, 8);
+ uL1 = getuL(buf, 0);
+ uL2 = getuL(buf, 8);
+ f1 = getf(buf, 24);
+ d1 = getd(buf, 16);
printf("getsb: %016llx %016llx %016llx %016llx\n",
(unsigned long long)sb1, (unsigned long long)sb2,
- (unsigned long long)getsb(0), (unsigned long long)getsb(8));
+ (unsigned long long)getsb(buf, 0), (unsigned long long)getsb(buf, 8));
printf("getub: %016llx %016llx %016llx %016llx\n",
(unsigned long long)ub1, (unsigned long long)ub2,
- (unsigned long long)getub(0), (unsigned long long)getub(8));
+ (unsigned long long)getub(buf, 0), (unsigned long long)getub(buf, 8));
printf("getsw: %016llx %016llx %016llx %016llx\n",
(unsigned long long)sw1, (unsigned long long)sw2,
- (unsigned long long)getsw(0), (unsigned long long)getsw(8));
+ (unsigned long long)getsw(buf, 0), (unsigned long long)getsw(buf, 8));
printf("getuw: %016llx %016llx %016llx %016llx\n",
(unsigned long long)uw1, (unsigned long long)uw2,
- (unsigned long long)getuw(0), (unsigned long long)getuw(8));
+ (unsigned long long)getuw(buf, 0), (unsigned long long)getuw(buf, 8));
printf("getsl: %016llx %016llx %016llx %016llx\n",
(unsigned long long)sl1, (unsigned long long)sl2,
- (unsigned long long)getsl(0), (unsigned long long)getsl(8));
+ (unsigned long long)getsl(buf, 0), (unsigned long long)getsl(buf, 8));
printf("getul: %016llx %016llx %016llx %016llx\n",
(unsigned long long)ul1, (unsigned long long)ul2,
- (unsigned long long)getul(0), (unsigned long long)getul(8));
+ (unsigned long long)getul(buf, 0), (unsigned long long)getul(buf, 8));
printf("getsL: %016llx %016llx %016llx %016llx\n",
(unsigned long long)sL1, (unsigned long long)sL2,
- (unsigned long long)getsL(0), (unsigned long long)getsL(8));
+ (unsigned long long)getsL(buf, 0), (unsigned long long)getsL(buf, 8));
printf("getuL: %016llx %016llx %016llx %016llx\n",
(unsigned long long)uL1, (unsigned long long)uL2,
- (unsigned long long)getuL(0), (unsigned long long)getuL(8));
- printf("getf: %f %f\n", f1, getf(24));
- printf("getd: %.16f %.16f\n", d1, getd(16));
+ (unsigned long long)getuL(buf, 0), (unsigned long long)getuL(buf, 8));
+ printf("getf: %f %f\n", f1, getf(buf, 24));
+ printf("getd: %.16f %.16f\n", d1, getd(buf, 16));
exit(0);
}
diff --git a/bits.h b/bits.h
index 1dcea658..c38fa7e5 100644
--- a/bits.h
+++ b/bits.h
@@ -4,9 +4,6 @@
* these macros extract bytes, words, longwords, floats or doubles from
* a message that contains these items in MSB-first byte order.
*
- * the macros access a local buffer named "buf" which must be declared
- * as unsigned char buf[SIZE];
- *
* assumptions:
* char is 8 bits, short is 16 bits, int is 32 bits, long long is 64 bits,
* float is 32 bits IEEE754, double is 64 bits IEEE754.
@@ -30,13 +27,13 @@ union long_double {
double d;
};
-#define getsb(off) ((char)buf[off])
-#define getub(off) (buf[off])
-#define getsw(off) ((short)(((unsigned)getub(off) << 8) | (unsigned)getub(off+1)))
-#define getuw(off) ((unsigned short)(((unsigned)getub(off) << 8) | (unsigned)getub(off+1)))
-#define getsl(off) ((int)(((unsigned)getuw(off) << 16) | getuw(off+2)))
-#define getul(off) ((unsigned int)(((unsigned)getuw(off) << 16) | getuw(off+2)))
-#define getsL(off) ((long long)(((unsigned long long)getul(off) << 32) | getul(off+4)))
-#define getuL(off) ((unsigned long long)(((unsigned long long)getul(off) << 32) | getul(off+4)))
-#define getf(off) (i_f.i = getsl(off), i_f.f)
-#define getd(off) (l_d.l = getsL(off), l_d.d)
+#define getsb(buf, off) ((char)buf[off])
+#define getub(buf, off) (buf[off])
+#define getsw(buf, off) ((short)(((unsigned)getub(buf, off) << 8) | (unsigned)getub(buf, off+1)))
+#define getuw(buf, off) ((unsigned short)(((unsigned)getub(buf, off) << 8) | (unsigned)getub(buf, off+1)))
+#define getsl(buf, off) ((int)(((unsigned)getuw(buf, off) << 16) | getuw(buf, off+2)))
+#define getul(buf, off) ((unsigned int)(((unsigned)getuw(buf, off) << 16) | getuw(buf, off+2)))
+#define getsL(buf, off) ((long long)(((unsigned long long)getul(buf, off) << 32) | getul(buf, off+4)))
+#define getuL(buf, off) ((unsigned long long)(((unsigned long long)getul(buf, off) << 32) | getul(buf, off+4)))
+#define getf(buf, off) (i_f.i = getsl(buf, off), i_f.f)
+#define getd(buf, off) (l_d.l = getsL(buf, off), l_d.d)