星空下的213
2022-05-10 10:44
采纳率: 100%
浏览 39
已结题

设备上传文件base64,用java解码byte数组转float结果异常

问题遇到的现象和发生背景

设备端(C写的程序)上传消息服务器(java写的)直接存入文件,下载文件进行解码,其中转换int、String类型正常,转换float数据异常。

问题相关代码,请勿粘贴截图
public class demo {
    private static String device_log = "THlSYX4BAADRAQIAJQZRPwAAAEAlBlE/1nxoP0BX1j4t/n+/sIT0u1xlcj8fr6S+v1UDv0u+Wz8fyuY+XoRkP4ClXD/YzwG/WY05P75eMD8EQMC9nN5+vxpef7+Q3Y+9hYU+v2n9Kr9o0nc/FmGAPmv11b5ck2g/JxBAVbZ1TSG6UU3Y2TNNzzi2TGnIfUwTwYpMCwaWTCgl0EwkIRBOsBKJT5V7KFB5uE9PBfh8TdZWrk0XFh1PDpyIUG7oWFGMF4BRu2rNUKfxSU91cRZOgqgYTrAoS04js4tOs6xLTsX56k0OPjFOfOaATtLQDE547L9NQft/Tc8xIk50nkJPwmFcT74uNVAUIAxQrSaXTRXUQ09w2LJPI5hbT2hDr03pTXBNjwk8TlGKIE+eek9P8OFDT+OzKk6GuCFO4TBET7LtaU8P+Y5PWOQiT/JeiU1t3+VMQu4VTevEHU1pIbBNLFwnTejX3UxsBGhOOkMcT6iV1k4wygNO+RNdTZPItQ==";

    public static void main(String[] args) {
        byte[] bytes = null;                         //字节流
        try {
            bytes = EncodeUtil.decryptBASE64(device_log);
        } catch (Exception e) {
            e.printStackTrace();
        }
        byte[] arr = new byte[4];
        System.arraycopy(bytes, 0, arr, 0, 4);
        System.out.println("LyRa--------------------" + new String(arr, Charset.forName("GBK")));          //LyRa
        System.arraycopy(bytes, 0 + 4, arr, 0, 4);
        int count1 = ByteUtil.getIntLowEndian(arr);
        System.out.println("长度:-----------------------" + count1);                                         //长度
        System.out.println("标识符:--------------------" + "0x" + Integer.toHexString(bytes[8] & 0xFF));  //0xd1
        System.out.println("id:--------------------0x0"+ Integer.toHexString(bytes[ 9] & 0xFF));        //0x00---id
        byte[] arr2 = new byte[2];
        System.arraycopy(bytes, 10, arr2, 0, 2);
        System.out.println("valid_mask有效掩码-------------------------" + ByteUtil.getTiny(arr2));
        int count = 4;
        byte[] tmpByte = new byte[count];
        System.arraycopy(bytes, 16, tmpByte, 0, count);
        System.out.print(ByteUtil.getLowFloat(tmpByte));
        System.out.println("----"+bytes.length+"----");
        //字节序号1-4:Lyra
        //字节序号5-8:126 1 0 0
        //字节序号9:---转int----1----------转16进制---0x01
        //字节序号10-11:---转int---2.0
        //字节序号12-15:---转Float---0.8165 ---反角X
        //字节序号16-19:---转float---2.0 ---反角Y
        //字节序号20-23:---转float---0.8165 ---反角Z
        //字节序号24-27:---转float---0.90815485 ---I路补偿值
        //字节序号28-31:---转float---0.4186344 ---Q路补偿值
        //字节序号32-35: ---转float---(-0.99997216)
        //字节序号36-39:---转float--- (-0.0074621066)
        //字节序号40-43:---转float--- 0.9468591
        //字节序号44-47:---转float--- (-0.32164857)
        //字节序号48-51:---转float--- (-0.51302713)
        //字节序号52-55:---转float--- 0.8583724
        //字节序号56-59:---转float--- 0.4507608
        //字节序号60-63:---转float--- 0.89264476
        //字节序号64-67:---转float---  0.8619003
        //字节序号68-71:---转float--- (-0.5070777)
        //字节序号72-75:---转float---  0.72481304
        //字节序号76-79:---转float---  0.68894565
        //字节序号80-83:---转float--- (-0.0938721)
        //字节序号84-87:---转float--- (-0.99558425)
        //字节序号88-91:---转float--- (-0.9975296)
        //字节序号92-95:---转float--- (-0.070246816)
        //字节序号96-99:---转float--- (-0.74422485)
        //字节序号100-103:---转float---(-0.66792923)
        //字节序号104-107:---转float--- 0.9680543
        //字节序号108-111:---转float--- 0.2507407
        //字节序号112-115:---转float---(-0.41788802)
        //字节序号116-119:---转float---(0.9084985)
        //字符序号120:---转int---39---转16进制---0x27
        //字符序号121:---转int---16---转16进制---0x10
        //字符序号122:---转int---64---转16进制---0x40
        //字节序号4*Nr+199:   382-199=183
        //123-126
        for (int i = 123; i <=370 ; i+=4) {
            System.arraycopy(bytes, i, tmpByte, 0, count);
            System.out.print(byte2float(tmpByte,0)+"  ");
        }
    }
    /**
     * 将byte转换成float
     */
    public static float byte2float(byte[] b, int index) {
        int l;
        l = b[index + 0];
        l &= 0xff;
        l |= ((long) b[index + 1] << 8);
        l &= 0xffff;
        l |= ((long) b[index + 2] << 16);
        l &= 0xffffff;
        l |= ((long) b[index + 3] << 24);
        return Float.intBitsToFloat(l);
    }
}
运行结果及报错内容
LyRa--------------------LyRa
长度:-----------------------382
标识符:--------------------0xd1
id:--------------------0x01
valid_mask有效掩码-------------------------2
2.0----382----
2.57647952E8  2.19914768E8  1.88587392E8  9.553676E7  6.6527652E7  7.274716E7  7.8655576E7  1.09128E8  6.0452275E8  4.5994066E9  1.13066854E10  3.48497331E9  2.6525704E8  3.65615808E8  2.63547059E9  1.83354286E10  5.8225779E10  6.8768858E10  2.75705917E10  3.38805734E9  6.3100448E8  6.4029504E8  8.5211034E8  1.17188646E9  8.5427322E8  4.9277968E8  7.4340851E8  1.08129434E9  5.9062387E8  4.02493184E8  2.68416016E8  6.8029331E8  3.26516429E9  3.69739418E9  1.21589576E10  9.40365E9  3.16986784E8  3.28545613E9  6.0010578E9  3.68418074E9  3.67553792E8  2.5197736E8  7.8868576E8  2.69341926E9  3.48091955E9  3.28636416E9  7.1597894E8  6.7830618E8  3.29153766E9  3.92466893E9  4.797374E9  2.73287373E9  2.88087616E8  1.20519528E8  1.57213728E8  1.65433008E8  3.69372448E8  1.75489728E8  1.16309824E8  9.7315098E8  2.62165146E9  1.80006605E9  
我的解答思路和尝试过的方法
我想要达到的结果

base[4]转换float结果正常

5条回答 默认 最新

相关推荐 更多相似问题