diff options
author | Ian C <ianc@noddybox.co.uk> | 2007-03-04 18:35:36 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2007-03-04 18:35:36 +0000 |
commit | 954af9179665457b40453a0417ddf5b3949a0449 (patch) | |
tree | e3772817de5c79e29b602ebe47fe0129793f1470 /num.c | |
parent | 892e6e107dbf2386831bd00e7f1c2a0bbe8b2cbb (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.c | 128 |
1 files changed, 128 insertions, 0 deletions
@@ -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); +} |