summaryrefslogtreecommitdiff
path: root/num.c
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2007-03-04 18:35:36 +0000
committerIan C <ianc@noddybox.co.uk>2007-03-04 18:35:36 +0000
commit954af9179665457b40453a0417ddf5b3949a0449 (patch)
treee3772817de5c79e29b602ebe47fe0129793f1470 /num.c
parent892e6e107dbf2386831bd00e7f1c2a0bbe8b2cbb (diff)
This commit was generated by cvs2svn to compensate for changes in r2,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'num.c')
-rw-r--r--num.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/num.c b/num.c
new file mode 100644
index 0000000..b24da39
--- /dev/null
+++ b/num.c
@@ -0,0 +1,128 @@
+#include <stdio.h>
+
+#define LONG 0
+#define WORD 1
+#define BYTE 2
+
+main(argc,argv)
+int argc;
+char *argv[];
+
+{
+ signed long snum;
+ unsigned long num;
+ unsigned short word;
+ unsigned char byte;
+ double dbl;
+ int mode=LONG;
+ int arg=0;
+ int f;
+ char *binary();
+ char *ascii();
+
+ if(argc==1)
+ {
+ printf("%s: usage %s N1 [..Nn]\n",argv[0],argv[0]);
+ exit(-1);
+ }
+
+ for(f=1;f<argc;f++)
+ {
+ num=(unsigned long)strtoul(argv[f],(char **)NULL,0);
+ snum=(signed long)num;
+
+ if (num<0x100)
+ mode=BYTE;
+ else if (num<0x10000)
+ mode=WORD;
+ else
+ mode=LONG;
+
+ switch(mode)
+ {
+ case LONG:
+ memcpy(&dbl,&num,sizeof(unsigned long));
+ printf("Original : %s\n",argv[f]);
+ printf("Octal : %o\n",num);
+ printf("Uns. Dec : %u\n",num);
+ printf("Sgn. Dec : %ld\n",snum);
+ printf("Hex : %8.8X\n",num);
+ printf("Binary : %s\n",binary(num,32));
+ printf("Ascii : %s\n",ascii(num,4));
+ printf("Double : %f\n\n",dbl);
+ break;
+ case WORD:
+ word=(unsigned short)num;
+ printf("Original : %s\n",argv[f]);
+ printf("Octal : %o\n",word);
+ printf("Uns. Dec : %u\n",word);
+ printf("Sgn. Dec : %ld\n",(signed short)snum);
+ printf("Hex : %4.4X\n",word);
+ printf("Binary : %s\n",binary(word,16));
+ printf("Ascii : %s\n\n",ascii((unsigned long)word,2));
+ break;
+ case BYTE:
+ byte=(unsigned char)num;
+ printf("Original : %s\n",argv[f]);
+ printf("Octal : %o\n",byte);
+ printf("Uns. Dec : %u\n",byte);
+ printf("Sgn. Dec : %ld\n",(signed char)snum);
+ printf("Hex : %2.2X\n",byte);
+ printf("Binary : %s\n",binary(byte,8));
+ printf("Ascii : %s\n\n",ascii((unsigned long)byte,1));
+ break;
+ }
+ }
+}
+
+
+char *binary(i,w)
+unsigned long i,w;
+
+{
+ static char buff[1024],*p;
+ unsigned long c=w,b=1<<(w-1);
+ int first=1;
+
+ p=buff;
+
+ for(;c--;b=b>>1)
+ {
+ if (!((c+1)%4)&&!first)
+ *p++=' ';
+
+ if(i&b)
+ *p++='1';
+ else
+ *p++='0';
+
+ first=0;
+ }
+
+ *p='\0';
+
+ return(buff);
+}
+
+
+char *ascii(num,l)
+unsigned long num;
+{
+ static char s[5];
+ int f;
+ unsigned char c;
+
+ s[l]=0;
+
+ for(f=0;f<l;f++)
+ {
+ c=num&0xff;
+ if ((c>=32)&&(c<127))
+ s[(l-1)-f]=c;
+ else
+ s[(l-1)-f]='.';
+ num=num>>8;
+ }
+
+ return(s);
+}