仪表整型数据到浮点数的转化
- 格式:doc
- 大小:135.50 KB
- 文档页数:9
浅谈C语⾔整型与浮点型转换本篇博客将阐述、讨论的内容:●intint的范围根据计算机的不同存在16位或32位的差异,以16位举例,最⼤值为1111 1111 1111 1111,也就是65535,如果出现65536,就会溢出。
●unsigned int(⽆符号整型)以16位系统为例,unsigned int能存储的数据范围是0~65535(需要注意整数是以补码形式存放)。
其进⾏的是模数计算,也就是所谓的⼆进制相加减,计算⽅法和⼗进制加减并⽆区别,但是unsigned int有着正溢出和负溢出的问题。
对于正溢出与负溢出,诸多基础概念便不再赘述,不懂的朋友可以去回顾计算机组成原理的相关知识。
这⾥仅举出⼀个负溢出的例⼦:进⾏⾃然丢弃后,可知结果为0。
很明显,产⽣了负溢出。
●接下来,我们说说unsigned int和int的相互转化,代码如下:float sum_elements(float a[],unsigend length){float result = 0;for(int i = 0; i <= length - 1; i++){result += a[i];return result;}}很显然,计算⼀个数组所有元素之和。
但当数组为空时,length输⼊0,会返回⼀个存储器错误。
为什么呢?请看unsigned int的计算,length是unsigned int 类型,进⾏的是模数运算,只代表正数,如果出先了0000000(这⾥有32个0)-00000..01(31个0,1个1)=111…11111(32个1)=UMAX。
⼀个本该为-1的数变成了⽆符号数最⼤值,当i取任何不为0的数都发⽣了⾮法访问,⾃然出现了存储器错误,并且任何数都⼩于UMAX,出现判别式永远为真,进⼊死循环。
解决办法有两种,做⼀个判断,当传⼊length<1,直接返回0 or 在之前就将length 转化为int。
Excel中的十六进制转浮点数公式Excel是一款功能强大的电子表格软件,它提供了许多内置函数和公式,可以帮助用户进行各种数据处理和计算。
在Excel中,有时候我们会遇到需要将十六进制数转换为浮点数的情况。
虽然Excel本身并没有提供直接的函数来实现这种转换,但是可以通过一定的公式来实现。
本文将探讨如何使用公式在Excel中进行十六进制到浮点数的转换。
1. 十六进制数与浮点数的关系我们需要了解十六进制数和浮点数之间的关系。
十六进制数是一种计数系统,使用16个符号来表示数值,分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
而浮点数是一种科学计数法表示的实数,在计算机中使用浮点数可以表示很大或很小的数字,并具有一定的精度。
在计算机中,浮点数通常采用IEEE 754标准来表示。
2. 十六进制转十进制要将十六进制数转换为浮点数,首先需要将十六进制数转换为十进制数。
在Excel中,可以使用HEX2DEC函数来实现这一步骤。
HEX2DEC函数的语法为=HEX2DEC(十六进制数),其中“十六进制数”是要转换的数值。
如果要将十六进制数“3A7B”转换为十进制数,可以使用函数=HEX2DEC("3A7B"),得到的结果是15099。
3. 十进制转浮点数有了十进制数后,接下来就可以将其转换为浮点数。
在Excel中,可以通过一定的公式来实现这一步骤。
假设要将十进制数15099转换为浮点数,可以使用如下公式:=POWER(-1, INT(十进制数/32768))*POWER(2, MOD(十进制数/32768, 32768))*(1+MOD(十进制数, 8)/8)此公式中,INT函数用于取整数部分,MOD函数用于取余数部分,POWER函数用于计算幂次。
通过这个公式,可以将十进制数转换为对应的浮点数。
4. 个人观点与总结在实际应用中,将十六进制数转换为浮点数可能并不是常见的需求,但了解如何在Excel中进行这种转换可以帮助我们更深入地理解数字的表示和计算。
海为plc整数转浮点数PLC(Programmable Logic Controller,可编程逻辑控制器)是一种采用数字计算机技术、以程序为中心、用于控制工业过程的计算机控制系统。
在PLC编程中,经常会涉及到整数(integers)和浮点数(floating-point numbers)之间的转换。
整数是没有小数部分的数字,而浮点数则可以包含小数部分。
在工业控制系统中,使用浮点数能够更加精确地描述和控制过程参数,因此转换整数为浮点数是很常见的操作。
PLC提供了一些指令和功能块,用于实现整数转浮点数的操作。
以下将介绍几种常见的转换方法。
1. 直接转换法(cast):最简单的方法是使用类型转换指令,将整数直接转换为浮点数。
例如,在PLC的Ladder Diagram(梯形图)中使用CAST指令,可以将一个整数类型的变量直接转换为浮点数类型。
2. 除法运算法(division):另一种方法是通过除法运算实现整数转浮点数。
将整数除以浮点数1.0可以得到相应的浮点数值。
例如,将一个整数变量x除以1.0并将结果赋值给浮点数变量y,则y的值将为x的浮点表示。
3. 隐式转换法(implicit conversion):某些PLC编程语言具有隐式类型转换的功能,在表达式中使用不同类型的变量时,系统会自动进行转换。
例如,在PLC的Structured Text(结构化文本)中,可以直接将整数变量赋值给浮点数变量,系统将自动进行类型转换。
4. 使用功能块(function block):PLC还提供了一些用于整数与浮点数转换的功能块。
在PLC的Function Block Diagram(功能块图)中,可以使用这些功能块完成转换操作。
例如,使用MOVE_TO_FLOAT功能块将整数变量转换为浮点数变量。
实际的转换方法取决于PLC的型号和编程语言。
在开发PLC应用程序时,应查阅相关的PLC文档和手册,以确定适合的转换方法。
verilog定点数转浮点数定点数和浮点数是数字电路中常用的数据表示形式。
定点数用于表示整数,而浮点数用于表示实数。
在Verilog语言中,可以通过一些算法和技巧将定点数转换为浮点数。
一种常用的定点数转浮点数的方法是将定点数表示法转换为IEEE 754浮点数表示法。
IEEE 754浮点数表示法是一种标准的浮点数表示方法,它使用符号位、指数位和尾数位来表示实数的值和精度。
定点数通常是用有限的二进制位数来表示的,而浮点数则采用科学计数法的形式。
因此,定点数转换为浮点数的关键是如何选择适当的指数和尾数,以保持有效的精度。
首先,将定点数转换为二进制数。
定点数可以是有符号的,因此需要考虑符号位。
根据定点数的位宽,选择合适的位数表示整数部分和小数部分。
对于有符号定点数,需要将其转换为补码表示法。
接下来,确定指数位和尾数位的位宽。
指数位用于表示浮点数的指数部分,尾数位用于表示浮点数的尾数部分。
根据IEEE 754浮点数表示法的规定,指数位和尾数位的位宽可以根据所需的精度和取值范围进行选择。
然后,进行指数的偏移。
在IEEE 754浮点数表示法中,指数位使用了一个偏移值来表示浮点数的真实指数值。
偏移值的选择取决于指数部分的位宽和所需的指数范围。
进行尾数的规范化。
浮点数的尾数部分采用了规范化的表示形式,其中最高有效位为1。
将定点数的二进制表示形式转换为浮点数的二进制表示形式时,需要对尾数进行规范化操作,使其满足规范化表示的要求。
最后,将符号位、指数位和尾数位组合成浮点数的表示形式。
根据IEEE 754浮点数表示法的规定,符号位放在最高位,指数位紧接着符号位,然后是尾数位。
以上是一种常用的定点数转浮点数的方法,可以在Verilog语言中实现。
该方法的关键是选择合适的位宽和参考IEEE 754浮点数表示法的规范进行转换。
通过这种方法,可以将定点数转换为浮点数,并在数字电路设计中应用浮点数运算。
定点数转浮点数的实现并不复杂,但需要仔细设计和验证。
单精度浮点数的转换和解析单精度浮点数的转换和解析工业现场通信经常遇到浮点数解析的问题,如果需要自己模拟数据而又不懂浮点数解析的话会很麻烦!很久以前根据modbus报文格式分析得到的,供大家参考。
浮点数保存的字节格式如下:地址+0 +1 +2 +3内容SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM这里S 代表符号位,1是负,0是正E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。
M 24位的尾数保存在23位中,只存储23位,最高位固定为1。
此方法用最较少的位数实现了较高的有效位数,提高了精度。
零是一个特定值,幂是0 尾数也是0。
浮点数作为一个十六进制数0xC1480000保存在存储区中,这个值如下:地址+0 +1 +2 +3内容0xC1 0x48 0x00 0x00浮点数和十六进制等效保存值之间的转换相当简单。
下面的例子说明上面的值如何转换。
浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表所列的那样分开,例如:地址+0 +1 +2 +3格式SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM二进制01001000 00000000 00000000十六进制C1 48 00 00从这个例子可以得到下面的信息:符号位是1 表示一个负数幂是二进制或十进制130,130减去127是3,就是实际的幂。
尾数是后面的二进制数0000000000在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数点到尾数的开头,得到尾数值如下: 接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为指数是3,尾数调整如下:结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:1100表示(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。
mcgs整数值转换浮点数MCGS整数值转换浮点数MCGS是一种在工业自动化领域广泛应用的编程语言,包含了丰富的数据类型和转换方法。
本文将介绍MCGS中整数值转换为浮点数的方法。
MCGS中整数值的表示方式为32位二进制数,其中前31位表示数值,最高位表示符号。
浮点数的表示方式为32位二进制数,其中1位表示符号,8位表示指数,23位表示尾数。
整数值转换为浮点数的方法如下:1. 将整数值的二进制表示按位拆分,将符号位、数值位分离。
2. 如果符号位为1,说明数值为负数,将数值位取反后再加1,得到补码表示。
3. 计算整数值的二进制表示中1的个数,得到位置p。
4. 计算指数值,指数值为p+127。
5. 将指数值转换为二进制表示,占用8位。
6. 将整数值的二进制表示中数值位的最高位之前的p位,加上1,获得尾数的整数值表示。
7. 将尾数的整数值表示转换为二进制表示,占用23位。
8. 将符号位、指数位、尾数位拼接起来,得到浮点数表示。
例如,将整数值-123转换为浮点数的过程如下:1. -123的二进制表示为11111111111111111111111110000101,符号位为1,数值位为1111111111111111111111110000101。
2. 数值位取反后再加1,得到补码表示为0000000000000000000000001111011。
3. 计算二进制表示中1的个数,得到p=6。
4. 指数值为133。
5. 指数值的二进制表示为10000101。
6. 尾数的整数值表示为100011,加1后得到100100。
7. 尾数的二进制表示为00011110100100。
8. 浮点数表示为11000010100011110100100000000000。
MCGS中整数值转换为浮点数的方法相对简单,但需要注意数值的范围和精度的问题,以免出现意料之外的结果。
在工业自动化过程中,对于计算精度和数据存储空间的要求较高,因此在进行数据类型的选择和转换时需要谨慎对待。
串行通讯是以字节为单位进行传送的,对于浮点数和整型数都需要进行转换才能进行通讯。
MCU和PC的浮点数都是基于IEEE754格式的。
有4字节(float)、8字节(double)、10字节(有一些不支持)。
这里以4字节(float)浮点数为例。
转化常见的方法有:一、强制指针类型转换。
// 转换Int数据到字节数组unsigned int intVariable,i;unsigned char charArray[2];(unsigned char) * pdata = ((unsigned char)*)&intVariable; //进行指针的强制转换for(i=0;i<2;i++){charArray[i] = *pdata++;}// 转换float数据到字节数组unsigned int i;float floatVariable;unsigned char charArray[4];(unsigned char) * pdata = ((unsigned char)*)&floatVariable; //进行指针的强制转换for(i=0;i<4;i++){charArray[i] = *pdata++;}// 转换字节数组到int数据unsigned int intVariable="0";unsigned char i;void *pf;pf =&intVariable;(unsigned char) * px = charArray;for(i=0;i<2;i++){*(((unsigned char)*)pf+i)=*(px+i);}// 转换字节数组到float数据float floatVariable="0";unsigned char i;void *pf;pf =&floatVariable;(unsigned char) * px = charArray;for(i=0;i<4;i++){*(((unsigned char)*)pf+i)=*(px+i);}二、使用结构和联合,这是我最喜欢的方法定义结构和联合如下typedef union {struct {unsigned char low_byte;unsigned char mlow_byte;unsigned char mhigh_byte;unsigned char high_byte;}float_byte;struct {unsigned int low_word;unsigned int high_word;}float_word;float value;}FLOAT;typedef union {struct {unsigned char low_byte;unsigned char high_byte;} d1;unsigned int value;} INT;使用方法:对于浮点数:FLOAT floatVariable;在程序中直接使用floatVariable.float_byte.high_byte,floatVariable.float_byte.mhigh_byte, floatVariable.float_byte.mlow_byte,floatVariable.float_byte.low_byte这四个字节就可以方便的进行转换了。
双精度浮点数转换单精度浮点数双精度浮点数转换整型数最近经常需要读取流量计数据,但流量计总量通常采用64位双精度浮点数(double)储存,但无论是电脑组态软件还是触摸屏组态软件,都只能读取32位数据,查询大量资料,不得其法。
只能自己动手!经过研究,通过威纶触摸屏宏指令,可以将双精度浮点数转为单精度浮点数或整型数据,转换过程分享给大家,希望对遇到相同问题的难兄难弟有帮助。
(没有转换的数据截图)(转换后的数据截图)以下为doule转float原程序:双精度浮点数转换单精度浮点数比较容易,将以下代码复制到宏文件即可。
macro_command main()bool bit[48],ba[8]short e[2]GetData(bit[0], "Local HMI", LW_Bit, 1000, 48)SetData(bit[4], "Local HMI", LW_Bit, 1400, 11)GetData(e[0], "Local HMI", LW, 14, 1)e[1]=e[0]-1023+127SetData(e[1], "Local HMI", LW, 15, 1)GetData(ba[0], "Local HMI", LW_Bit, 1500, 8)SetData(bit[45], "Local HMI", LW_Bit, 1600, 3)SetData(bit[16], "Local HMI", LW_Bit, 1603, 16)SetData(bit[0], "Local HMI", LW_Bit, 1703, 4)SetData(ba[0], "Local HMI", LW_Bit, 1707, 8)SetData(bit[15], "Local HMI", LW_Bit, 1715, 1)end macro_command如果看不懂,以下是加标注的完整原程序,供大家参考。
c语言浮点数赋值整型数处理如何将浮点数赋值给整型数进行处理。
在C语言中,浮点数和整型数属于不同的数据类型。
浮点数是一个带有小数点的数值,而整型数则只包含整数部分。
当我们需要将一个浮点数赋值给一个整型数进行处理时,可能需要进行一些特定的操作来保证数据的准确性和有效性。
第一步:了解浮点数和整型数的区别在C语言中,浮点数和整型数是不同的数据类型。
浮点数包含小数部分,可以表示非常大和非常小的数值范围,但在精度上可能存在一定的误差。
整型数则只能表示整数部分,没有小数部分,但精度相对较高。
第二步:确定数据的转换方式在将浮点数赋值给整型数进行处理时,我们可以选择使用以下几种方式来进行转换:1. 舍入法:使用四舍五入的方法将浮点数转换为整数。
C语言中提供了几个相关的函数,例如ceil()、floor()和round()等,可以方便地进行浮点数的舍入操作。
2. 截断法:直接将浮点数的小数部分截断,只保留整数部分。
这种方法比较简单,但可能会丢失一定的数据精度。
3. 近似法:使用一定的近似算法将浮点数转换为整数。
例如,我们可以通过乘以一个适当的倍数,然后再将结果截断来实现近似转换。
第三步:确定数据的范围和精度在将浮点数赋值给整型数进行处理之前,我们需要明确数据的范围和精度,以确保转换的数据符合我们的要求。
对于整型数而言,一般有不同的大小范围,例如char、short、int和long等。
对于浮点数而言,一般有单精度和双精度两种表示方式。
单精度浮点数(float)通常占用4个字节,双精度浮点数(double)通常占用8个字节。
根据具体的需求,我们需要选择合适的整型数来存储转换后的数据。
第四步:进行数据转换在确定了数据的转换方式、范围和精度之后,我们可以使用C语言中的相关运算符和函数来进行浮点数到整型数的转换。
1. 使用强制类型转换运算符:C语言中提供了一种强制类型转换运算符,可以将一个数据值转换为指定的数据类型。
例如,我们可以使用(int)来将一个浮点数转换为整型数。
modbus转浮点数在工业控制系统中,Modbus是一种常用的通信协议,用于在不同设备之间传输数据。
其中,Modbus协议支持整型和浮点数数据类型的传输。
对于Modbus协议中的浮点数数据,需要进行转换后才能在不同设备之间正确传输和解析。
在Modbus协议中,浮点数采用IEEE 754标准进行表示。
IEEE 754标准定义了浮点数的表示方式,包括符号位、阶码和尾数。
根据IEEE 754标准,将浮点数转换为Modbus协议中的格式需要以下步骤:1. 确定浮点数的符号位(正数为0,负数为1)。
2. 将浮点数的绝对值转换为二进制表示。
3. 将二进制数按照IEEE 754标准进行规范化,得到阶码和尾数。
4. 将符号位、阶码和尾数按照Modbus协议的格式进行排列。
在Modbus协议中,浮点数通常以两个16位的寄存器进行传输。
第一个寄存器包含浮点数的高16位(表示阶码和部分尾数),第二个寄存器包含浮点数的低16位(表示剩余尾数)。
在接收端,将Modbus协议中的浮点数转换为实际的浮点数需要进行逆向操作:1. 将两个16位寄存器中的数据按照Modbus协议的格式进行解析,得到符号位、阶码和尾数。
2. 根据IEEE 754标准将阶码和尾数合并,得到浮点数的二进制表示。
3. 将二进制数转换为十进制浮点数,即为最终的结果。
需要注意的是,在进行浮点数的转换时,需要考虑不同设备的字节顺序(Big-Endian和Little-Endian)问题。
根据不同设备的字节顺序,需要对Modbus协议中的数据进行适当的调整。
总结起来,Modbus协议中的浮点数需要进行特定的转换才能在不同设备之间正确传输和解析。
了解浮点数的IEEE 754表示方式,以及Modbus协议中的数据排列方式,可以帮助工程师在工业控制系统中正确处理浮点数数据。
我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥组态王与单片机协议1.通讯口设置:通讯方式:RS-232,RS-485,RS-422均可。
波特率: 由单片机决定。
字节数据格式:起始位、数据位、停止位均由单片机决定。
2.设备地址设置格式:##.# (前面的两个字符是设备地址,范围为0-255;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包。
)3.寄存器设置4.格式:读写格式(除字头外所有字节均为ASCII 码)说明;字头:1字节,40H设备地址: 2字节,0—255(即0---0x0ffH )标志:1字节,bit0~bit7,bit0= 0:读,bit0= 1:写。
Bit1= 0:不打包, bit3bit2 = 00,数据类型为字节。
bit3bit2 = 01,数据类型为字。
bit3bit2 = 1x,数据类型为浮点数。
数据地址: 2字节,0x0000~0xffff数据字节数:1字节,1—100,实际读写的数据的字节数。
数据…:为实际的数据异或:异或从设备地址到异或字节前 CR :0x0d 。
5.上位机发送读命令下位机应答:若正常:若不正常:例:读12号仪表,数据地址为15的数据。
其中数据为255,数据类型为字节,不打包。
所发数据为:我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥若正确:若不正确:4.上位机发送写命令下位机应答:若正常: 若不正常:例:写12号仪表,数据地址为15。
其中数据为255,数据类型为字节,不打包。
所发数据为:若正确:若不正确:6.浮点数格式:4字节浮点数 = 第一字节高4位ASCII 码+第一字节低4位ASCII 码+第二字节高4位ASCII 码+第二字节低4位ASCII 码 +第三字节高4位ASCII 码+第三字节低4位ASCII 码 +第四字节高4位ASCII 码+第四字节低4位ASCII 码位第1字节高4位 第2字节高4位 第3字节高4位 第4字节高4位★ 四字节浮点数格式:(1)第一字节(2)第二字节(3)第三字节(4)第四字节注:数符=0——正,数符=1——负阶符=0——正,阶符=1——负D7 D6 D5 ~ D0★浮点数可表示范围:-1×232~1×232★数符:1位阶符:1位阶码:6位例:流量积算控制仪表瞬时流量测量值数据=100.210转换成浮点数:100.210=27⨯0.7828125=0716+C816+6616+6616=30ASCII+37ASCII+43ASCII+38ASCII+36ASCII+36ASCII+36ASCII+36ASCII小数部份:0.7828125 ⇒ 0.7828125⨯256=200.4⇒ 0.4⨯256=102.4⇒0.4⨯256=102.410进制:第一字节第二字节第三字节第四字节十六进制: ASCII码:第一字节第二字节第三字节第四字节小数部分乘以256整数部份为第二字节(200)第二字节小数部分乘以256整数部份为第三字节(102)第三字节小数部分乘以256整数部份为第四字节(102)传输格式如下:第1字节低4位第2字节低4位第3字节低4位第4字节低4位第1字节高4位第2字节高4位第3字节高4位第4字节高4位3、注:仪表内部数据为十六进制表示的十进制数。
如:实时测量值为500,则用十六进制表示为1F4H。
仪表通讯传输是将上述十六进制数据转化为标准ASCII码(即一字节的16进制数转化为2个ASCII码──高4位ASCII码+低4位ASCII码)。
如:上述数据1F4H(16进制),传输时,转化为ASCII码则为30H、31H、46H、34H。
7.此浮点数格式的转换:1)ASCII码到浮点数:/*in:char* c要转化的ASII码字符,应为4个字符。
Return :转换后的浮点数。
*/float C4toD(char * c){BYTE Hd[30], Jiema[30];float DTc[30];float Decimal = 0;memset(Hd, 0, sizeof(Hd));memset(Jiema, 0, sizeof(Jiema));memset(DTc, 0, sizeof(DTc));float returnflo = 0;BOOL ShuFU = FALSE, JieFU = FALSE;if((c[7] > 0x40) && (c[7] < 0x47))Hd[7] = ((c[7] - 0x37) & 0x0f);else if((c[7] > 0x60) && (c[7] < 0x67))Hd[7] = ((c[7] - 0x57) & 0x0f);elseHd[7] = ((c[7] - 0x30) & 0x0f);if((c[6] > 0x40) && (c[6] < 0x47))Hd[6] = ((c[6] - 0x37) & 0x0f);else if((c[6] > 0x60) && (c[6] < 0x67))Hd[6] = ((c[6] - 0x57) & 0x0f);elseHd[6] = ((c[6] - 0x30) & 0x0f);我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥DTc[2] = (float)(((float)(Hd[6] * 16.0) + (float)(Hd[7])) / 256.0);if((c[5] > 0x40) && (c[5] < 0x47))Hd[5] = ((c[5] - 0x37) & 0x0f);else if((c[5] > 0x60) && (c[5] < 0x67))Hd[5] = ((c[5] - 0x57) & 0x0f);elseHd[5] = ((c[5] - 0x30) & 0x0f);if((c[4] > 0x40) && (c[4] < 0x47))Hd[4] = ((c[4] - 0x37) & 0x0f);else if((c[4] > 0x60) && (c[4] < 0x67))Hd[4] = ((c[4] - 0x57) & 0x0f);elseHd[4] = ((c[4] - 0x30) & 0x0f);DTc[1] = (float)((((float)(Hd[4] * 16.0) + (float)Hd[5]) + DTc[2]) / 256.0);if((c[3] > 0x40) && (c[3] < 0x47))Hd[3] = ((c[3] - 0x37) & 0x0f);else if((c[3] > 0x60) && (c[3] < 0x67))Hd[3] = ((c[3] - 0x57) & 0x0f);elseHd[3] = ((c[3] - 0x30) & 0x0f);if((c[2] > 0x40) && (c[2] < 0x47))Hd[2] = ((c[2] - 0x37) & 0x0f);else if((c[2] > 0x60) && (c[2] < 0x67))Hd[2] = ((c[2] - 0x57) & 0x0f);elseHd[2] = ((c[2] - 0x30) & 0x0f);Decimal = (float)(((float)(Hd[2] * 16) + (float)(Hd[3]) + DTc[1])/ 256.0);if((c[1] > 0x40) && (c[1] < 0x47))Jiema[1] = ((c[1] - 0x37) & 0x0f);else if((c[1] > 0x60) && (c[1] < 0x67))Jiema[1] = ((c[1] - 0x57) & 0x0f);elseJiema[1] = ((c[1] - 0x30) & 0x0f);if((c[0] > 0x40) && (c[0] < 0x47))Jiema[0] = ((c[0] - 0x37) & 0x0f);我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥else if((c[0] > 0x60) && (c[0] < 0x67))Jiema[0] = ((c[0] - 0x57) & 0x0f);elseJiema[0] = ((c[0] - 0x30) & 0x0f);ShuFU = ((Jiema[0] & 0x08) >> 3) > 0;JieFU = ((Jiema[0] & 0x04) >> 2) > 0;Jiema[2] = (Jiema[0] & 0x03) * 16 + Jiema[1];if(JieFU)returnflo = (float)pow(2, (-1) * Jiema[2]) * Decimal;elsereturnflo = (float)pow(2, Jiema[2]) * Decimal;if(ShuFU)returnflo = (-1) * returnflo;return returnflo;}2)浮点数到ASCII码:/*in:char * c:存储浮点数转换后的ASCII码字符。
Float d:要转换的浮点数。
Return : 无。
*/void D4toC(char * c,float d){BYTE i = 0, Jiema = 0;char inbyte1[30];BOOL ShuFu = FALSE, JieFu = FALSE;int inbyte2 = 0, inbyte3 = 0, inbyte4 = 0;char afterbyte2[30], afterbyte3[30], afterbyte4[30];float F_afterbyte2 = 0, F_afterbyte3 = 0, F_afterbyte4 = 0;memset(inbyte1, 0x30, sizeof(inbyte1));memset(afterbyte2, 0x30, sizeof(afterbyte2));memset(afterbyte3, 0x30, sizeof(afterbyte3));memset(afterbyte4, 0x30, sizeof(afterbyte4));inbyte1[10] = 0x0;我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥afterbyte2[10] = 0x0;afterbyte3[10] = 0x0;afterbyte4[10] = 0x0;if(d == 0){for(int j = 0; j < 8; j++)c[j] = 0x30;return;}if(d < 0){ShuFu = TRUE;d = (-1) * d;}while(d > 1){d =(float)(d / 2.0);i ++;}while(d <= 0.5){JieFu = TRUE;d = (float)(d * 2.0);i ++;}if(d == 1){for(int j = 2; j < 8; j++)c[j] = 0x46;}else{inbyte2 = (int)(d * 256);F_afterbyte2 = (d * 256) - (int)(d * 256);inbyte3 = (int)(F_afterbyte2 * 256);F_afterbyte3 = (F_afterbyte2 * 256) - (int)(F_afterbyte2 * 256);inbyte4 = (int)(F_afterbyte3 * 256);F_afterbyte4 = (F_afterbyte3 * 256) - (int)(F_afterbyte3 * 256);itoa(inbyte2, afterbyte2, 16);我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥itoa(inbyte3, afterbyte3, 16);itoa(inbyte4, afterbyte4, 16);if(inbyte2 == 0){c[2] = 0x30;c[3] = 0x30;}else if(inbyte2 < 16){c[2] = 0x30;c[3] = afterbyte2[0];}else{c[2] = afterbyte2[0];c[3] = afterbyte2[1];}if(inbyte3 == 0){c[4] = 0x30;c[5] = 0x30;}else if(inbyte3 < 16){c[4] = 0x30;c[5] = afterbyte3[0];}else{c[4] = afterbyte3[0];c[5] = afterbyte3[1];}if(inbyte4 == 0){c[6] = 0x30;c[7] = 0x30;}else if(inbyte4 < 16){c[6] = 0x30;c[7] = afterbyte4[0];}else我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥{c[6] = afterbyte4[0];c[7] = afterbyte4[1];}}if(JieFu){if(i > 0x3f)i = 0x3f;}else if(i > 0x32)i = 32;if(ShuFu)i = i | 0x80;if(JieFu)i = i | 0x40;itoa(i, inbyte1, 16);if(inbyte1 == 0){c[0] = 0x30;c[1] = 0x30;}else if(i < 16){c[0] = 0x30;c[1] = inbyte1[0];}else{c[0] = inbyte1[0];c[1] = inbyte1[1];}for(i = 0; i < 8; i ++){if((c[i] > 0x60) && (c[i] < 0x67))c[i] = c[i] - 0x20;}c[8] = 0x00;}我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥。