美文网首页
CP56time2a java 解析

CP56time2a java 解析

作者: 秋元_92a3 | 来源:发表于2020-09-11 12:23 被阅读0次

    对于java解决这个问题,注意一下几个点

    1、java中byte的范围是-127128,C语言中byte的范围是0255,所有当两个语音进行交互的时候,需要在java中进行数值的兼容处理,所有在我的程序中有小于0,加256的处理
    2、Calendar中,月份是从0开始变化的,Calendar中获取月份获取到的值是8,说明当前是9月,如果是与C进行交互,发送的时候需要在获取到的月份的数值上加1.解析时需要在获取的数值上减1;

    package com.fp.pile.cp;
    
    import java.util.Calendar;
    import java.util.Date;
    
    /**
     * CP56time2a
     *
     * @author drebander
     * @since 2020-09-11 11:35 上午
     **/
    public class Cp56Time2a {
    
        public static Date toDate(byte[] bytes) {
            int milliseconds1 = bytes[0] < 0 ? 256 + bytes[0] : bytes[0];
            int milliseconds2 = bytes[1] < 0 ? 256 + bytes[1] : bytes[1];
            int milliseconds = milliseconds1 + milliseconds2 * 256;
            // 位于 0011 1111
            int minutes = bytes[2] & 0x3f;
            // 位于 0001 1111
            int hours = bytes[3] & 0x1f;
            // 位于 0000 1111
            int days = bytes[4] & 0x0f;
            // 位于 0001 1111
            int months = bytes[5] & 0x0f;
            // 位于 0111 1111
            int years = bytes[6] & 0x7f;
            final Calendar aTime = Calendar.getInstance();
            aTime.set(Calendar.MILLISECOND, milliseconds);
            aTime.set(Calendar.MINUTE, minutes);
            aTime.set(Calendar.HOUR_OF_DAY, hours);
            aTime.set(Calendar.DAY_OF_MONTH, days);
            aTime.set(Calendar.MONTH, months);
            aTime.set(Calendar.YEAR, years + 2000);
            return aTime.getTime();
        }
    
        public static byte[] toBytes(Date aDate) {
            byte[] result = new byte[7];
            final Calendar aTime = Calendar.getInstance();
            aTime.setTime(aDate);
            final int milliseconds = aTime.get(Calendar.MILLISECOND);
            result[0] = (byte) (milliseconds % 256);
            result[1] = (byte) (milliseconds / 256);
            result[2] = (byte) aTime.get(Calendar.MINUTE);
            result[3] = (byte) aTime.get(Calendar.HOUR_OF_DAY);
            result[4] = (byte) aTime.get(Calendar.DAY_OF_MONTH);
            result[5] = (byte) aTime.get(Calendar.MONTH);
            result[6] = (byte) (aTime.get(Calendar.YEAR) % 100);
            System.out.println("Year->" + aTime.get(Calendar.YEAR));
            return result;
        }
    
        public static void main(String[] args) {
            Date aDate = new Date();
            System.out.println(aDate);
            final byte[] bytes = toBytes(aDate);
            final Date date = toDate(bytes);
            System.out.println(date);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:CP56time2a java 解析

          本文链接:https://www.haomeiwen.com/subject/zutxqhtx.html