Modbus-RTU读取Float和Double值

Modbus-RTU读取Float和Double值,第1张

Modbus-RTU读取Float和Double值

Modbus-RTU读取Float和Double值

#include "stdafx.h"
#include 
using 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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5703042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存