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

📄 dofptoa.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
字号:
/* * dofptoa - do the grunge work to convert an fp number to ascii */#include <stdio.h>#include "ntp_fp.h"#include "lib_strbuf.h"#include "ntp_string.h"#include "ntp_stdlib.h"char *dofptoa(	u_fp fpv,	int neg,	short ndec,	int msec	){	register u_char *cp, *cpend;	register u_long val;	register short dec;	u_char cbuf[12];	u_char *cpdec;	char *buf;	char *bp;	/*	 * Get a string buffer before starting	 */	LIB_GETBUF(buf);	/*	 * Zero out the buffer	 */	memset((char *)cbuf, 0, sizeof cbuf);	/*	 * Set the pointers to point at the first	 * decimal place.  Get a local copy of the value.	 */	cp = cpend = &cbuf[5];	val = fpv;	/*	 * If we have to, decode the integral part	 */	if (!(val & 0xffff0000))	    cp--;	else {		register u_short sv = (u_short)(val >> 16);		register u_short tmp;		register u_short ten = 10;		do {			tmp = sv;			sv = (u_short) (sv/ten);			*(--cp) = (u_char)(tmp - ((sv<<3) + (sv<<1)));		} while (sv != 0);	}	/*	 * Figure out how much of the fraction to do	 */	if (msec) {		dec = (short)(ndec + 3);		if (dec < 3)		    dec = 3;		cpdec = &cbuf[8];	} else {		dec = ndec;		cpdec = cpend;	}	if (dec > 6)	    dec = 6;		if (dec > 0) {		do {			val &= 0xffff;			val = (val << 3) + (val << 1);			*cpend++ = (u_char)(val >> 16);		} while (--dec > 0);	}	if (val & 0x8000) {		register u_char *tp;		/*		 * Round it. Ick.		 */		tp = cpend;		*(--tp) += 1;		while (*tp >= 10) {			*tp = 0;			*(--tp) += 1;		}	}	/*	 * Remove leading zeroes if necessary	 */	while (cp < (cpdec -1) && *cp == 0)	    cp++;		/*	 * Copy it into the buffer, asciizing as we go.	 */	bp = buf;	if (neg)	    *bp++ = '-';		while (cp < cpend) {		if (cp == cpdec)		    *bp++ = '.';		*bp++ = (char)(*cp++ + '0');	}	*bp = '\0';	return buf;}

⌨️ 快捷键说明

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