⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atob.c

📁 mips架构的bootloader,99左右的版本 但源代码现在没人更新了
💻 C
字号:
/************************************************************* * File: lib/atob.c * Purpose: Part of C runtime library * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history */#include "string.h"/* a well behaved strncpy (always null terminates the dest) */#define strNcpy(x,y,z)	strncpy(x,y,z),(x)[z]=0#ifdef TESTmain(argc,argv)int argc;char *argv[];{unsigned long n;int len;if (argc != 3) {	printf("arg count %d\n",argc);	exit(1);	}if (!atob(&len,argv[2],10)) {	printf("bad len\n");	exit(1);	}if (gethex(&n,argv[1],len)) printf("OK: %08x\n",n);else printf("ERROR\n");}#endif /**************************************************************  atob(vp,p,base) *	converts p to binary result in vp, rtn 1 on success*/atob(vp,p,base)unsigned int *vp;char *p;int base;{int r;if (base == 0) {	if (p[0] == '0') {		if (p[1] == 'x') r = _atob(vp,&p[2],16);		else if (p[1] == 't'|| p[1] == 'n') r = _atob(vp,&p[2],10);		else if (p[1] == 'o') r = _atob(vp,&p[2],8);		else r = _atob(vp,p,8);		}	else r = _atob(vp,p,10);	}else r = _atob(vp,p,base);return(r);}/**************************************************************  _atob(vp,p,base)*/_atob(vp,p,base)unsigned int *vp;char *p;int base;{int digit,neg;unsigned int value,v1,v2;char *q,tmp[20];if (base == 16 && (q=strchr(p,'.'))) {	if (q-p > 20-1) return(0);	strNcpy(tmp,p,q-p);	if (!_atob(&v1,tmp,16)) return(0);	q++;	if (strchr(q,'.')) return(0);	if (!_atob(&v2,q,16)) return(0);	*vp = (v1<<16)+v2;	return(1);	}neg = 0;if (base == 10 && *p == '-') {	neg = 1;	p++;	}value = *vp = 0;for (;*p;p++) {	value *= base;	if (*p >= '0' && *p <= '9') digit = *p - '0';	else if (*p >= 'a' && *p <= 'f') digit = *p - 'a' + 10;	else if (*p >= 'A' && *p <= 'F') digit = *p - 'A' + 10;	else return(0);	if (digit >= base) return(0);	value += digit;	}if (base == 10 && neg) value = 0-value;*vp = value;return(1);}/**************************************************************  char *btoa(dst,value,base) *	converts value to ascii, result in dst*/char *btoa(dst,value,base)char *dst;int base;unsigned int value;{char buf[34],digit;int i,j,rem,neg;if (value == 0) {	dst[0] = '0';	dst[1] = 0;	return(dst);	}neg = 0;if (base == 10 && (value&(1L<<31))) {	value = (~value)+1;	neg = 1;	}for (i=0;value != 0;i++) {	rem = value % base;	value /= base;	if (rem >= 0 && rem <= 9) digit = rem + '0';	else if (rem >= 10 && rem <= 36) digit = (rem-10) + 'a';	buf[i] = digit;	}buf[i] = 0;if (neg) strcat(buf,"-");/* reverse the string */for (i=0,j=strlen(buf)-1;j>=0;i++,j--) dst[i] = buf[j];dst[i] = 0;return(dst);}/**************************************************************  gethex(vp,p,n) *	convert n hex digits from p to binary, result in vp, *	rtn 1 on success*/gethex(vp,p,n)unsigned long *vp;char *p;int n;{unsigned long v;int digit;for (v=0;n>0;n--) {	if (*p==0) return(0);	v <<= 4;	if (*p >= '0' && *p <= '9') digit = *p - '0';	else if (*p >= 'a' && *p <= 'f') digit = *p - 'a' + 10;	else if (*p >= 'A' && *p <= 'F') digit = *p - 'A' + 10;	else return(0);	v |= digit;	p++;	}*vp = v;return(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -