栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Modbus-RTU读取Float和Double值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号