我必須從資料庫中為我在 C 上的應用程式獲取的原始位元組決議日期。我發現 MySQL 中的日期是 4 個位元組,最后兩個分別是月份和日期。但是前兩個位元組奇怪地編碼了年份,所以如果日期是 2002-08-30,內容將是 210、15、8、31。如果日期是 1996-12-22,日期將存盤為 204 , 15, 12, 22。顯然,第一個位元組不能大于 255,所以我檢查了 2047 年——它是 255、15 和 2048——它是 128、16。
一開始我以為關鍵是二進制操作,但我不太明白其中的邏輯:
2047: 0111 1111 1111
255: 0000 1111 1111
15: 0000 0000 1111
2048: 1000 0000 0000
128: 0000 1000 0000
16: 0000 0001 0000
任何想法?
uj5u.com熱心網友回復:
似乎編碼的邏輯是擦除第一個數字的最高有效位并從這個擦除的位寫入第二個數字,如下所示:
2002 from 210 and 15:
1101 0010 -> _101 0010;
0000 1111 _101 0010 -> 0111 1101 0010
2048 from 128 and 16:
1000 0000 -> _000 0000
0001 0000 _000 0000 -> 1000 0000 0000
uj5u.com熱心網友回復:
根據您提供的內容,它似乎是N1 - 128 N2 * 128.
uj5u.com熱心網友回復:
哪個版本???
DATETIME 用于以壓縮十進制(8 位元組)編碼。但是,當添加小數秒時,格式更改為類似
- 長度指示(1 位元組)
INT UNSIGNED自 1970 年以來的秒數(4 個位元組)- 小數秒(0-3 位元組)
DATEMEDIUMINT UNSIGNED自 0000-00-00 (或類似的東西)以來的天數(3 個位元組)存盤。
你是如何得到“原始位元組”的?沒有功能可以讓您這樣做。選擇 HEX(some-date) 首先轉換為字串(如“2022-03-22”),然后取其十六進制。那給你323032322D30332D3232。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/447510.html
標籤:C mysql 日期 编码 mysql-x-devapi
上一篇:從日期陣列創建日期范圍
下一篇:要轉換為日期格式的多格式字串列
