Java 实现 电总协议INFO 数据格式解析,先低字节后高字节

    /**
     * src低位在前
     * 将一个字节数组转换为 IEEE 754 单精度浮点数(float)
     *
     * EEE 754 单精度浮点数概述
     * IEEE 754 单精度浮点数由 32 位组成,分为三个部分:
     * 符号位 (1 bit):表示数值的正负。
     * 指数位 (8 bits):用于存储指数值。
     * 尾数/有效数字 (23 bits):用于存储数值的精确部分。
     * @param src
     * @return
     */
    public static float byteArray2IEEE754Float(byte[] src) {
        int data = (src[3] << 24) & 0xffffffff;
        data = data | ((src[2] << 16) & 0x00ffffff);
        data = data | ((src[1] << 8) & 0x0000ffff);
        data = data | (src[0] & 0x000000ff);
        int nSign;
        if ((data & 0x80000000) > 0) {
            nSign = -1;
        } else {
            nSign = 1;
        }
        int nExp = data & (0x7F800000);
        nExp = nExp >> 23;
        int nMantissa = data & (0x7FFFFF);
        float value = nSign * (1 + (nMantissa * (float) Math.pow(2, -23))) * (float) Math.pow(2, nExp - 127);
        return value;
    }
3.3.4 INFO 数据格式
3.3.4.1
浮点数格式
浮点数格式与 IEEE-754 标准( 32 )有关,长度 32 位。四个字节的浮点数
据传送顺序为先低字节后高字节,即传送顺序为:先低字节 D7~D0 ,接着
D15~D8 ,然后 D23~D16 ,最后高字节 D31~D24 ,最终作为分成 8 ASCII 码传
送。浮点数格式如下:
浮点数的正负取决于符号位 S 的值, S=1 表示浮点数为负, S=0 则浮点
数为正。例如:当 32 位浮点数为 0x40 0xA0 0x00 0x00 时(如上所示),
S=0 E=129 M=2^21
则浮点数值 = 1 + 2^21 × 2^-23 )· 2^(129-127) = 5.0
float 类型数据解析
39 41 31 39 35 43 34 33 :交流输入相电压 A(220.1) ,怎么对应出来的 10 进制的 220.1
39 41 31 39 35 43 34 33 (8 字节 )
9 A 1 9 5 C 4 3
9A 19 5C 43 4 字节)先低字节后高字节,调用下面函数可将这 4 个字节转成浮点数( 10 进制)
   private static String DIGITS = "0123456789ABCDEF";
   
   // byteArray = [57, 65, 49, 57, 53, 67, 52, 51];
   public static byte[] AsciiArray2HexArray(byte[] byteArray) {
        String s = new String(byteArray);
        byte[] buff = new byte[s.length() >> 1];
        int index = 0;
        String temp;
        for (int i = 0; i < s.length(); i += 2) {
            temp = s.substring(i, i + 2);
            buff[index] = (byte) Integer.parseInt(temp, 16);
            ++index;
        }
        return buff;
    }

// buff = [-102, 25, 92, 67]    <——  9A 19 5C 43

在线浮点数转二进制工具
(网址: https://tooltt.com/floatconverter/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值