常见的是float4字节,double8字节
浮点数的标准可以参看IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),简单的说就是把连续的几个字节分成两段,前面一段表示有效数字,后面一段表示2的几次方
浮点数的标准可以参看IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),简单的说就是把连续的几个字节分成两段,前面一段表示有效数字,后面一段表示2的几次方
解决方案 »
- CArchive 结构体的读写
- 关于实现图像的局部马赛克的一些问题,希望各位高手帮忙啊~~~
- 看过windows核心编程的进来看看!!
- 关于ComboBox中Value类型的问题
- 怎样得到可变参数个数
- 小弟现在在做一个通讯录程序,不知道用什么数据库,XDM给个建议吧
- vc++ 6 为什么不能在 windows 2000 sp4 上安装成功
- 可以用鼠标拖动的CScrollView
- 程序一打开就报错(The Active Xcontrol cannot be instantiaied)
- 怎样改变VC里函数的名字
- 了解各种通信协议,并有协议栈开发经验,请问什么是协议栈开发经验
- 如何将bmp的照片背景色透明处理在保存。
{
UINT32 m_nStart; //开始标识
float m_fData[512]; // 数据体,2048字节
UINT32 m_nEnd; //结束标识
} m_data;读数据时直接读到&m_data中,而不是Byte rxdata[2048]。用m_fData画线就行。
注意几点:
1. 以上只是个例子,结构内容根据实际情况自己定。
2. 下位机要定一个类似的结构,以满足协议要求。不同的下位机开发环境语法略有差异。
3. 如果是低端单片机(像C51等),没有浮点处理能力,用软件模拟很慢,最好用整形数传送,我们一般用实际温度x100表示,提高效率。上位机用整形数画图也快一些,显示时除以100变成浮点数。
4. 整个过程不用特意解析浮点数结构。当然了解一下可以扩展知识面。
#define MLIMIT 2048 //缓冲数据2048个字节,超过为越界
Byte rxdata[2048];float GetReal(char *buf,long off,BOO type)
{
if((off+4)>MLIMIT)
return 0.0;
union
{
char c[4];
float val;
}x;
if(type) //之所以要加这个判断,是有的下位和电脑高低位相反,比如西门子PLC
{
x.c[0]=*(buf+off+3);
x.c[1]=*(buf+off+2);
x.c[2]=*(buf+off+1);
x.c[3]=*(buf+off+0); //加0可以不要,只是让你明白
}
else
{
x.c[0]=*(buf+off+0); //加0可以不要,只是让你明白
x.c[1]=*(buf+off+1);
x.c[2]=*(buf+off+2);
x.c[3]=*(buf+off+3);
}
return x.val;
}应用:比如接受到第102个字节开始的数据表示压力p0001
float p001=GetReal(rxdata,102,true)
long GetDword(...)
short GetWord(...)
char GetByte()
time GetTime()
long GetCount()
等等等等