满意答案
参考我的C,翻译成JAVA应该是没问题的,因为这部分核心算法是差不多的。
以下为我自创的压缩算法:
//农历月份信息。一年用3个字节表示
//+-------------------------------------------------------------------------+
//| 第23位 | 第22-17位 | 第16-13位 | 第12-0位 |
//|--------+------------------------+------------+--------------------------|
//| 保留 | 农历正月初一的年内序数 | 闰月 | 一个比特对应一个月份大小 |
//+-------------------------------------------------------------------------+
//月份大小数据是月份小的在低位,月份大的在高位,即正月在最低位。
//以1900年为例,3个字节的数据展开成二进制位:
// 0 011110 1000 1 0 1 1 0 1 1 0 1 0 0 1 0
//保留 1月31日(春节) 闰八月 从左往右依次十二月,十一月……闰八月、八月、七月……正月的天数
//农历月份对应的位为0,表示这个月为29天(小月),为1表示有30天(大月)。
//二十四节气信息。一年用6个字节表示,每个节气使用两比特数据。
//+-------------------------------------------------------+
//| 第一字节最高两位 | 第一字节其余6位至第六字节共46个位 |
//|------------------+------------------------------------|
//|小寒的年内序数减3 | 每个节气距离上一节气的天数,共23组 |
//+-------------------------------------------------------+
//小寒的年内序数已给出,剩下的23个节气分别对应这23组数据,有以下含义:
//+-------------------------------------------------------+
//| 二进制位 | 意义 | 描述 |
//|-----------+------+------------------------------------|
//| 00 | 14天 | 当前对应的节气距离上一节气为14天 |
//|-----------+------+------------------------------------|
//| 01 | 15天 | 当前对应的节气距离上一节气为15天 |
//|-----------+------+------------------------------------|
//| 10 | 16天 | 当前对应的节气距离上一节气为16天 |
//|-----------+------+------------------------------------|
//| 11 | 17天 | 当前对应的节气距离上一节气为17天 |
//+-------------------------------------------------------+
//由上表可以看出,除小寒以外的其余23个节气的两比特数据加上14就是距离上一节气的天数。
//节气顺序:
//小寒 大寒 立春 雨水 惊蛰 春分 清明 谷雨 立夏 小满 芒种 夏至
//小暑 大暑 立秋 处暑 白露 秋分 寒露 霜降 立冬 小雪 大雪 冬至
详细算法有源代码,请看以下链接。
链接:http://pan.baidu.com/s/1qY9ysBM 密码:zu7m
00分享举报