[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