我必须解析一个有2个字节的字段,并保存日期时间信息。 要获取数据时间,此字段具有以下结构:
每天5位,月份4位,年份7位(总共16位)
要获得我正在使用的那一天:
字节日=(字节)(数组[0]>> 3); (没关系)
我也可以获得这一年,但我无法获得月份价值,你能帮我解决这个问题吗?
数组值是:{243,29}我必须得到这个日期时间:30/6/2019
谢谢!
答案 0 :(得分:1)
翻译成您选择的语言。
#include <stdio.h>
int array[2] = { 243,29 };
int main(void)
{
int fullval = array[0] << 8 | array[1];
int day = (fullval >> 11) & 31;
int year = 1990 + (fullval & 127);
int month = (fullval >> 7) & 15;
printf ("%d/%d/%d\n", day, month, year);
}
答案 1 :(得分:0)
鉴于你的评论,我猜你遇到的问题是按位OR和AND运算符,在java中将是&#34; |&#34;和&#34;&amp;&#34; - 使用其他语言,可能会有所不同,但它确实存在。
按位&#34; |&#34;帮助您组合两个字节的位:
0000 0001 | 0000 0010 ----> 0000 0011
而按位&#34;&amp;&#34;帮助你屏蔽一些位:
0101 0110 & 1111 0000 ----> 0101 0000
使用按位移位运算符(您已经在使用),您可以移动位(&#34;&gt;&gt;&#34;或&#34;&lt;&lt;&#34;),提取某些位而忽略其他位(&#34;&amp;&#34;)并组合位(&#34; |&#34;)。
这意味着,您可以从第一个字节中提取三个月的位,将它们移过一位,然后从第二个字节中提取剩余的位,最后将这两个位组合起来。