www.pudn.com > Float.zip > Float.c
#include#include #define Uchar unsigned char #define Uint unsigned int Uchar x[4]; void FtoC(void); void CtoF(void); Uchar get_Ex(void); void get_int(Uchar Ex); void get_xiao(Uchar Ex); /*************************************************************/ void FtoC(void) { float a; Uchar i,*px; void *pf; px = x; pf = &a; a = 34.526 * 9.1; for(i=0; i<4; i++) *(px + i) = *((char *)pf + i); } /****************************************************************/ void CtoF(void) { float a; Uchar i,*px; Uchar x[4] = {56,180,150,73}; void *pf; px = x; pf = &a; for(i=0; i<4; i++) *((char *)pf + i) = *(px + i); } /*****************************************************************/ Uchar get_Ex(void) { Uint Ex; Ex = (x[0] << 1) + (x[1] >> 7) - 127; return(Ex); } /*****************************************************************/ void get_int(Uchar Ex) { Uint I; if(Ex < 8) I = (x[1] | 0x80) >> (7 - Ex); else if((Ex > 7) && (Ex < 16)) { I = x[1]; I = (I << 8) + x[2]; I = (I | 0x8000) >> (15 - Ex); } } /******************************************************************/ void get_xiao(Uchar Ex) { long y[8] = {50000000L,25000000L,12500000L,6250000L,3125000L,1562500L,781250L,390625L}; long P; Uchar Pf,Ps,Pt,n; if(Ex < 8) n = (x[1] << (Ex + 1)) + (x[2] >> (7 - Ex)); else if(Ex > 7 && Ex < 16) n = (x[2] << (Ex - 7)) + (x[3] >> (15 - Ex)); P = (n >> 7) * y[0] + ((n >> 6) & 0x01) * y[1] + ((n >> 5) & 0x01) * y[2] + ((n >> 4) & 0x01) * y[3] + ((n >> 3) & 0x01) * y[4] +((n >> 2) & 0x01) * y[5] +((n >> 1) & 0x01) * y[6] + ((n >> 0) & 0x01) * y[7]; Pf = P / 10000000L; Ps = (P % 10000000L) / 1000000L; Pt = ((P % 10000000L) % 1000000L) / 100000L; } /********************************************************************************************************************************************************************************************************************/