[Coco] Converting Dec to Binary

Wayne Campbell asa.rand at gmail.com
Thu Mar 22 09:13:57 EDT 2018


Line feeds without carriage returns is what happened to your formatting.
Also, if there were any tabs, they were somehow converted to spaces.

On Thu, Mar 22, 2018, 3:49 AM Mathew Boytim via Coco <coco at maltedmedia.com>
wrote:

>  I don't know what happened to the formatting.  Let's try this again...
>
> void lwip_itoa(char* result, size_t bufsize, int number){  const int base
> = 10;  char* ptr = result, *ptr1 = result, tmp_char;  int tmp_value;//
> LWIP_UNUSED_ARG(bufsize);
>   do {    tmp_value = number;    number /= base;    *ptr++ =
> "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35
> + (tmp_value - number * base)];  } while(number);
>    /* Apply negative sign */  if (tmp_value < 0) {     *ptr++ = '-';  }
> *ptr-- = '\0';  while(ptr1 < ptr) {    tmp_char = *ptr;    *ptr--= *ptr1;
>   *ptr1++ = tmp_char;  }}
>
>
>     On Thursday, March 22, 2018, 6:45:12 AM EDT, Mathew Boytim via Coco <
> coco at maltedmedia.com> wrote:
>
>   Here is what I thought was an 'interesting' itoa implementation
> apparently from lwip (Lightweight IP) which I think works for any base from
> 2 to 36.
>
> Matt
> void lwip_itoa(char* result, size_t bufsize, int number){  const int base
> = 10;  char* ptr = result, *ptr1 = result, tmp_char;  int tmp_value;//
> LWIP_UNUSED_ARG(bufsize);
>   do {    tmp_value = number;    number /= base;    *ptr++ =
> "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35
> + (tmp_value - number * base)];  } while(number);
>    /* Apply negative sign */  if (tmp_value < 0) {     *ptr++ = '-';  }
> *ptr-- = '\0';  while(ptr1 < ptr) {    tmp_char = *ptr;    *ptr--= *ptr1;
>   *ptr1++ = tmp_char;  }}
>
>     On Thursday, March 22, 2018, 6:22:26 AM EDT, Barry Nelson <
> barry.nelson at amobiledevice.com> wrote:
>
>  A number base converter program…
> ============================
>
> /*    Program to convert Base Numbers    */
> /*        J.D.Bowman 08/23/84            */
> /*    Translated to UNIX by..........    */
> /*            The modem brothers        */
> /*    Jorge Lezcano and Barry Nelson    */
> #ifdef SYS5
> #define index strchr
> #endif
>
> #include    <stdio.h>
> char        bufin [17] , bufout [17];
> char        clear[256];
> int        b;
> unsigned    i;
> char        *type;
> void        dechex();
> void        hexdec();
> void        decbin();
> void        bindec();
> void        hexbin();
> void        binhex();
> void        wait();
> void        intin();
> void        itoh();
> void        display();
> void        hexin();
> unsigned    htoi();
> void        itoa();
> void        itob();
> void        binin();
> unsigned    btoi();
> extern int tgetent();
> extern char *strcpy();
> extern size_t strlen();
> extern int atoi();
> extern void exit();
> extern char *index();
> extern char *strcat();
> extern int fpurge();
>
> int main ()
> {
> char        val[3];
> int        vali ;
> char        *getenv();
> char        *tgetstr();
> char        *term;
> char        *point;
> char        buff[1024];
> int        l;
>     term=getenv("TERM");
>     if (term==NULL)
>         term="dumb";
>     tgetent(buff,term);
>     point=buff;
>     strcpy(clear,tgetstr("cl",&point));
>     if (clear[0]!='#')
>     {
>         l=0;
>         while (l<strlen(clear))
>             clear[l++] &= 127;
>     }
>     else
>         strcpy(clear,"\f");
>     b = 0 ;
>     while (b != 2)
>     {
>         puts(clear);
>         printf("  Base Number Conversion by\n          J.D.Bowman");
>         printf("\nWritten in 'C' language 08/84");
>     printf("\nTranslated to Unix by the modem brothers 1989.");
>         printf("\n\n              MENU\n");
>         printf("\n        1> Decimal to Hex");
>         printf("\n        2> Hex to Decimal");
>         printf("\n        3> Decimal to Binary");
>         printf("\n        4> Binary to Decimal");
>         printf("\n        5> Hex to Binary");
>         printf("\n        6> Binary to Hex");
>         printf("\n        0> End Session\n");
>         printf("\n        Enter Your Choice...");
>         fgets(val,2,stdin);
>     point=index(val,'\n');
>     if (point!=NULL) {
>         point='\0';
>     }
>         vali = atoi(val);
>     if (vali == 1)
>         {dechex();}
>     if (vali == 2)
>         {hexdec();}
>     if (vali == 3)
>         {decbin();}
>     if (vali == 4)
>         {bindec();}
>     if (vali == 5)
>         {hexbin();}
>     if (vali == 6)
>         {binhex();}
>     if (vali == 0)
>         exit(0);
>     if (vali > 6)
>         printf("\nMust enter numeric (0 to 6).");
>     if (vali > 6) { wait(); }
> }
> }
> void dechex()
> {
>         type="Decimal to Hex";
>         intin();
>         i = atoi(bufin);
>         itoh(i,bufout);
>         display();
>         wait();
> }
> void hexdec()
> {
>         type="Hex to Decimal";
>         hexin();
>         i = htoi(bufin);
>         itoa(i,bufout);
>         display();
>         wait();
> }
> void decbin()
> {
>         type="Decimal to Binary";
>         intin();
>         i = atoi(bufin);
>         itob(i,bufout);
>         display();
>         wait();
> }
> void bindec()
> {
>         type="Binary to Decimal";
>         binin();
>         i=btoi(bufin);
>         itoa(i,bufout);
>         display();
>         wait();
> }
> void hexbin()
> {
>         type="Hex to Binary";
>         hexin();
>         i=htoi(bufin);
>         itob(i,bufout);
>         display();
>         wait();
> }
> void binhex()
> {
>         type="Binary to Hex";
>         binin();
>         i=btoi(bufin);
>         itoh(i,bufout);
>         display();
>         wait();
> }
> void binin()
> {
>     char        *point;
>
>     fpurge(stdin);
>         printf("\nEnter 16 bit Binary number:\n");
>         fgets(bufin,16,stdin);
>     point=index(bufin,'\n');
>     if (point!=NULL) {
>         point='\0';
>     }
> }
> void intin()
> {
>     char        *point;
>
>     fpurge(stdin);
>         printf("\nEnter Decimal Integer:\n");
>         fgets(bufin,16,stdin);
>     point=index(bufin,'\n');
>     if (point!=NULL) {
>         point='\0';
>     }
> }
> void hexin()
> {
>     char        *point;
>
>     fpurge(stdin);
>         printf("\nEnter Hex Integer:\n");
>         fgets(bufin,16,stdin);
>     point=index(bufin,'\n');
>     if (point!=NULL) {
>         point='\0';
>     }
> }
> void display()
> {
>         printf("\n%s%s",clear,type);
>         printf("\nConversion of: ");
>         puts(bufin);
>         printf("\nEquals : ");
>         puts(bufout);
> }
> void clears()
> {        puts(clear);    }
> void wait()
> {
>     fpurge(stdin);
>         printf("\nPress <Enter> to continue... ");
>         getchar();
> }
> void itoh(in,buff)
>     unsigned in;
>     char *buff;
> {
>         sprintf(buff,"%x",in);
> }
> unsigned htoi(buff)
>     char *buff;
> {
>         unsigned o;
>         sscanf(buff,"%x",&o);
>         return(o);
> }
> void itob(in,buff)
>     unsigned in;
>     char *buff;
> {
>         char *bin[16];
>         char temp[5];
>         char *digits;
>         int d;
>         int n;
>         bin[0]="0000";
>         bin[1]="0001";
>         bin[2]="0010";
>         bin[3]="0011";
>         bin[4]="0100";
>         bin[5]="0101";
>         bin[6]="0110";
>         bin[7]="0111";
>         bin[8]="1000";
>         bin[9]="1001";
>         bin[10]="1010";
>         bin[11]="1011";
>         bin[12]="1100";
>         bin[13]="1101";
>         bin[14]="1110";
>         bin[15]="1111";
>         digits="0123456789abcdef";
>         strcpy(buff,"");
>         sprintf(temp,"%x",in);
>         n=0;
>         while (n<strlen(temp))
>         {
>             d=index(digits,temp[n++])-index(digits,'0');
>             strcat(buff,bin[d]);
>         }
> }
> unsigned btoi(buff)
>     char *buff;
> {
>         unsigned o;
>         int n;
>         long p;
>         p=1;
>         o=0;
>         n=strlen(buff)-1;
>         while (n>=0)
>         {
>             if (buff[n--]=='1')
>                 o+=p;
>             p+=p;
>         }
>         return(o);
> }
> void itoa(in,buff)
>     unsigned in;
>     char *buff;
> {
>         sprintf(buff,"%d",in);
> }
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list