/** * CP56Time2a解析 * * java中byte的范围是-127128,C语言中byte的范围是0255,所有当两个语音进行交互的时候, * 需要在java中进行数值的兼容处理,所有在我的程序中有小于0,加256的处理 * * Calendar中,月份是从0开始变化的,Calendar中获取月份获取到的值是8,说明当前是9月, * 如果是与C进行交互,发送的时候需要在获取到的月份的数值上加1.解析时需要在获取的数值上减1; * * * @param str 十六进制报文 D9 01 23 09 09 03 16 * @return 2022-04-09 09:35:29 */ public static LocalDateTime convertToCP56Time2a(String str) { log.info("CP56Time2a str:{}",str); int[] bytes = HexUtils.hexStringToIntArray(str); 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
DL/T 634.5104 规约中 CP56Time2a 的转换和解析
于 2022-04-09 09:40:01 首次发布