我必須解析一個字段,它有2個字節,並保存日期時間信息。 要獲得DATATIME,這一領域具有這樣的結構:解析3個部分中的2個字節
5位爲天,一個月4位和第7位爲一年(共16位)
爲了讓我使用了天:
byte day =(byte)(array [0] >> 3); (沒關係)
我也可以得到一年,但我無法得到月份的價值,你能幫助我嗎?
數組值是:{} 243,29和我一定要得到這個日期時間:30/6/2019
謝謝!
我必須解析一個字段,它有2個字節,並保存日期時間信息。 要獲得DATATIME,這一領域具有這樣的結構:解析3個部分中的2個字節
5位爲天,一個月4位和第7位爲一年(共16位)
爲了讓我使用了天:
byte day =(byte)(array [0] >> 3); (沒關係)
我也可以得到一年,但我無法得到月份的價值,你能幫助我嗎?
數組值是:{} 243,29和我一定要得到這個日期時間:30/6/2019
謝謝!
翻譯成您選擇的語言。
#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);
}
給出你的評論,我想你遇到的問題是按位OR和AND運算符,這在java中是「|」和「&」 - 與其他語言一樣,可能會有所不同,但它確實存在。
按位「|」幫助您從兩個字節結合位:
0000 0001 | 0000 0010 ----> 0000 0011
同時按位「&」可以幫助你屏蔽掉一些位:
0101 0110 & 1111 0000 ----> 0101 0000
與按位移位運算符(你已經在使用),你可以移動位(「>>」或「< <」),提取某些位而忽略其他位(「&」)併合並位(「|」)。
這意味着,您可以從第一個字節中提取三個月份的位,將它們移動一位,然後從第二個字節中提取剩餘位,最後將這兩個位合併。
非常感謝您的解釋! – Nico812
爲什麼你不能得到這個月? – rmalchow
我不知道如何解析它,因爲它共享來自第一個數組值的3位和來自第二個數據庫的1位 – Nico812
@ Nico812因此,從第一個值中提取3位,從第二個位中提取1位併合並它們。或者,更好的是,首先將兩個值結合起來。 –