[Coco] Converting Dec to Binary
Mathew Boytim
maboytim at yahoo.com
Thu Mar 22 06:44:05 EDT 2018
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
More information about the Coco
mailing list