我必须将3个字节的数据压缩为两个字节。 3字节数据包括day是一个字节,小时是另一个字节,最后几分钟是另一个字节。所以我总共有3个字节data.how我可以把这个数据翻转成两个字节。
谢谢,
答案 0 :(得分:0)
要将3个字节的数据打包成两个,您必须分配这些位: 我会将分钟的位0到5,小时的位6到10以及日期号的剩余位。
所以打包位的公式是:
packed=minutes+hours*64+days*2048
要取回未压缩的数据:
minutes=packed & 63
hours=(packed & 1984) / 64
days=(packed & 63488) / 2048
答案 1 :(得分:0)
我假设您需要从1-31开始的一天,从0到39的小时和从0到59的分钟,因此您需要每天5位,小时5位和分钟6位。这恰好是16位。你应该把5位(天)和前3位小时放入你的第一个字节,其余2位用于小时,6位用于分钟到第二个字节:
int day = 23;
int hour = 15;
int minute = 34;
byte fromint_dh = (day << 3) | (hour >> 2);
byte fromint_hm = ((hour & 0x03) << 6) | (minute); // take the last two bits from hour and put them at the beginning
....
int d = fromint_dh >> 3;
int h = ((fromint_dh & 0x07) << 2) | ((fromint_hm & 0xc0) >> 6); // take the last 3 bits of the fst byte and the fst 2 bits of the snd byte
int m = fromint_hm & 0x3F // only take the last 6 bits
希望这会有所帮助。这很容易弄错......