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

📄 ngen_convert.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//* *  GENESIS  Copyright (c) 1986, 1990 by John J. Grefenstette *  This program may be freely copied for educational *  and research purposes.  All other rights reserved. * *  file:	convert.c * *  purpose:	functions that translate between various representations * *  modified:	16 apr 86 *		15 sep 90: translations for floating point representation */#include "extern.h"static char BIT[CHARSIZE] ={ '\200', '\100', '\040', '\020',				'\010', '\004', '\002', '\001'};/* Itoc and Ctoi translate ints to strings and vice versa */unsigned long int Ctoi(instring, length)	char *instring;		/* string representation	*/	int length;		/* length of instring		*/{	register int i;		/* loop control			*/	unsigned long n;	/* accumulator for return value	*/	n = (unsigned long) 0;	for (i=0; i<length; i++)	{		n <<= 1;		n += (*instring++ - (int) '0');	}	return(n);}Itoc(n, outstring, length)	unsigned long int n;	/* input int value		*/	char *outstring;	/* string representation	*/	int length;		/* length of outstring		*/{	register int i;		/* loop control			*/	for (i=length-1; i>=0; i--)	{		outstring[i] = '0' + (n & 1);		n >>= 1;	}}/* Pack and Unpack translate between strings and (packed) bit arrays */Pack(instring, outstring, length)	char *instring;		/* string representation		*/	char *outstring;	/* packed representation of instring	*/	int length;		/* length of instring			*/{	static firstflag = 1 ;	static full;	/* number of fully used bytes in outstring	*/	static slop;	/* number of bits used in outstring's last byte	*/	register i,j;	/* loop control					*/	if (firstflag)	{		full = length / CHARSIZE;		slop = length % CHARSIZE;		firstflag = 0;	}	for (i=0; i<full; i++, outstring++)	{		*outstring = '\0';		for (j=0; j < CHARSIZE; j++)			if (*instring++ == '1')  *outstring |= BIT[j];	}	if (slop)	{		*outstring = '\0';		for (j=0; j < slop; j++)			if (*instring++ == '1')  *outstring |= BIT[j];	}}Unpack(instring, outstring, length)	char *instring;		/* packed bit representation		*/	char *outstring;	/* string representation of instring	*/	int length;		/* length of outstring			*/{	static firstflag = 1 ;	static full;	/* number of fully used bytes in instring	*/	static slop;	/* number of bits used in instring's last byte	*/	register i,j;	/* loop control					*/	if (firstflag)	{		full = length / CHARSIZE;		slop = length % CHARSIZE;		firstflag = 0;	}	for (i=0; i<full; i++, instring++)	{		for (j=0; j < CHARSIZE; j++)			if (*instring & BIT[j])				*outstring++ = '1';			else				*outstring++ = '0';	}	if (slop)	{		for (j=0; j < slop; j++)			if (*instring & BIT[j])				*outstring++ = '1';			else				*outstring++ = '0';	}	*outstring = '\0';}/* Translations between fixed point ints and reflected Gray code */Gray(instring, outstring, length)char *instring;		/* string representing fixed point int		*/char *outstring;	/* string representing Gray coded value		*/register int length;	/* length of strings				*/{	register int i;	register char last;	last = '0';	for (i=0; i<length; i++)	{		outstring[i] = '0' + (instring[i] != last);		last = instring[i];	}}Degray(instring, outstring, length)char *instring;		/* string representing Gray coded int		*/char *outstring;	/* string representing fixed point int		*/register int length;	/* length of strings				*/{	register int i;	register int last;	last = 0;	for (i=0; i<length; i++)	{		if (instring[i] == '1')			outstring[i] = '0' + (!last);		else			outstring[i] = '0' + last;		last = outstring[i] - '0';	}}/* Translations between string representation and floating point vectors */FloatRep(instring, vect, length)	char instring[];	/* string representation		*/	double vect[];		/* floating point representation	*/	int length;		/* length of vect (output array)	*/{	register int i;		/* loop control				*/	unsigned long int n;	/* decoded int value			*/	register int pos;	/* position to start decoding		*/	char tmpstring[80];	/* used for gray code interpretation	*/	pos = 0;	for (i=0; i < length; i++)	{		if (Grayflag)		{			Degray(&instring[pos], tmpstring, Gene[i].bitlength);			n = Ctoi(tmpstring, Gene[i].bitlength);		}		else		{			n = Ctoi(&instring[pos], Gene[i].bitlength);		}		vect[i] = Gene[i].min + n*Gene[i].incr;		pos += Gene[i].bitlength;	}}StringRep(vect, outstring, length)	double *vect;		/* floating point representation	*/	char *outstring;	/* string representation		*/	int length;		/* length of vect 			*/{	register int i;		/* loop control				*/	unsigned long int n;	/* index of vext[i] within legal range	*/	register int pos;	/* next position for filling outstring	*/	char tmpstring[80];	/* used for gray code translation	*/		pos = 0;	for (i=0; i < length; i++)	{		/* convert floating value to an index */		n = (int) ((vect[i] - Gene[i].min) / Gene[i].incr + 0.5);		/* encode n in char string */		if (Grayflag)		{			/* convert to Gray code */			Itoc(n, tmpstring, Gene[i].bitlength);			Gray(tmpstring, &outstring[pos], Gene[i].bitlength);		}		else		{			Itoc(n, &outstring[pos], Gene[i].bitlength);		}		pos += Gene[i].bitlength;	}	outstring[pos] = '\0';}/*** end of file ***/

⌨️ 快捷键说明

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