Modbus-RTU读取Float和Double值
#include "stdafx.h" #includeusing namespace std; float getFloat(unsigned short value1, unsigned short value2); double getDouble(unsigned short value1, unsigned short value2, unsigned short value3, unsigned short value4); int _tmain(int argc, _TCHAR* argv[]) { //1.25 float fff = getFloat(0x00,0x3FA0); cout << "float:" << fff < > stop; return 0; } float getFloat(unsigned short value1, unsigned short value2) { float fTemp; unsigned int *pTemp=(unsigned int *)&fTemp; unsigned int chTemp[4];//a,b,c,d chTemp[0]=value1&0xff; chTemp[1]=(value1>>8)&0xff; chTemp[2]=value2&0xff; chTemp[3]=(value2>>8)&0xff; //这是ABCD //*pTemp=((chTemp[1]<<24)&0xff000000)|((chTemp[0]<<16)&0xff0000)|((chTemp[3]<<8)&0xff00)|(chTemp[2]&0xff); //这是CDAB ==> OK *pTemp=((chTemp[3]<<24)&0xff000000)|((chTemp[2]<<16)&0xff0000)|((chTemp[1]<<8)&0xff00)|(chTemp[0]&0xff); //这是BADC //*pTemp=((chTemp[0]<<24)&0xff000000)|((chTemp[1]<<16)&0xff0000)|((chTemp[2]<<8)&0xff00)|(chTemp[3]&0xff); //这是DCBA //*pTemp=((chTemp[2]<<24)&0xff000000)|((chTemp[3]<<16)&0xff0000)|((chTemp[0]<<8)&0xff00)|(chTemp[1]&0xff); return fTemp; } double getDouble(unsigned short value1, unsigned short value2, unsigned short value3, unsigned short value4) { double fTemp; unsigned long long *pTemp=(unsigned long long *)&fTemp; unsigned long long chTemp[8];//A,B,C,D,E,F,G,H chTemp[0]=value1&0xff; chTemp[1]=(value1>>8)&0xff; chTemp[2]=value2&0xff; chTemp[3]=(value2>>8)&0xff; chTemp[4]=value3&0xff; chTemp[5]=(value3>>8)&0xff; chTemp[6]=value4&0xff; chTemp[7]=(value4>>8)&0xff; //这是AB CD EF GH //*pTemp = ((chTemp[1]<<56)&0xff00000000000000) // |((chTemp[0]<<48)&0x00ff000000000000) // |((chTemp[3]<<40)&0x0000ff0000000000) // |((chTemp[2]<<32)&0x000000ff00000000) // |((chTemp[5]<<24)&0x00000000ff000000) // |((chTemp[4]<<16)&0x0000000000ff0000) // |((chTemp[7]<< 8)&0x000000000000ff00) // |((chTemp[6]<< 0)&0x00000000000000ff); //这是GH EF CD AB // ==> OK *pTemp = ((chTemp[7]<<56)&0xff00000000000000) |((chTemp[6]<<48)&0x00ff000000000000) |((chTemp[5]<<40)&0x0000ff0000000000) |((chTemp[4]<<32)&0x000000ff00000000) |((chTemp[3]<<24)&0x00000000ff000000) |((chTemp[2]<<16)&0x0000000000ff0000) |((chTemp[1]<< 8)&0x000000000000ff00) |((chTemp[0]<< 0)&0x00000000000000ff); //这是BA DC FE HG //*pTemp = ((chTemp[0]<<56)&0xff00000000000000) // |((chTemp[1]<<48)&0x00ff000000000000) // |((chTemp[2]<<40)&0x0000ff0000000000) // |((chTemp[3]<<32)&0x000000ff00000000) // |((chTemp[4]<<24)&0x00000000ff000000) // |((chTemp[5]<<16)&0x0000000000ff0000) // |((chTemp[6]<< 8)&0x000000000000ff00) // |((chTemp[7]<< 0)&0x00000000000000ff); //这是HG FE DC BA //*pTemp = ((chTemp[6]<<56)&0xff00000000000000) // |((chTemp[7]<<48)&0x00ff000000000000) // |((chTemp[4]<<40)&0x0000ff0000000000) // |((chTemp[5]<<32)&0x000000ff00000000) // |((chTemp[2]<<24)&0x00000000ff000000) // |((chTemp[3]<<16)&0x0000000000ff0000) // |((chTemp[0]<< 8)&0x000000000000ff00) // |((chTemp[1]<< 0)&0x00000000000000ff); return fTemp; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)