对于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);
}
}
网友评论