回答編集履歴

19

 

2022/03/14 14:39

投稿

退会済みユーザー
test CHANGED
@@ -121,7 +121,7 @@
121
121
 
122
122
  # まとめ
123
123
  ターゲットとなる4バイトを2進数化して先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
124
- ・年 = b の上位3bit(*)に、2016(10進数)を足した数 (*「aの下位2bit+bの上位3bit」である可能性もある、データ不足のため検証不可
124
+ ・年 = b の上位3bit(*)に、2016(10進数)を足した数 (*「aの下位2bit+bの上位3bit」である可能性が高い
125
125
  ・月 = d の下位2bit + a の上位2bit
126
126
  ・日 = c の下位3bit + d の上位2bit
127
127
  ・時 = f (4bit)+ c の上位1bit 

18

 

2022/03/14 14:31

投稿

退会済みユーザー
test CHANGED
@@ -133,6 +133,14 @@
133
133
  (ミリ秒の格納方法は不明です。コメントの追加データから規則性は見つけられませんでした)
134
134
 
135
135
 
136
+ ---
137
+ 解析手順の途中で、cをfの後ろに持って行っただけの状態で進めたので、不可解な格納方法に思われましたが
138
+ それぞれのbit列が連続するように整理すると、
139
+ 下記のように、g h -> e f -> c d -> a b の順(バイト列で見るとリトルエンディアン)になっていますね。
140
+ ```
141
+ g h e f c d a b
142
+ ssss ssmm mmmm HHHH HDDD DDMM MM?? yyy?
143
+ ```
136
144
 
137
145
 
138
146
 

17

 

2022/03/14 13:52

投稿

退会済みユーザー
test CHANGED
@@ -96,7 +96,7 @@
96
96
  0000 1010 1101 ---- ---- -100 ---- ---- | 2021/04/19
97
97
  0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
98
98
  ```
99
- 試行錯誤して、残りの部分で月/日を6つの例と整合する等に説明すれば、下記のようになりま
99
+ 試行錯誤して、残りの部分で月/日を6つの例と整合するような組み合わせを探すと、下記のようになりました
100
100
  ・月 => dの下位2bit+aの上位2bit
101
101
  ・日 => cの下位3bit+dの上位2bit
102
102
  ```

16

 

2022/03/14 13:48

投稿

退会済みユーザー
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  ※上記において、「+」記号は、前に記述した2進数に、後ろに記述した2進数を連結することを表す。
132
132
 
133
- (ミリ秒の格納方法は不明です。私の力では、コメントの追加データから規則性は見つけれませんでした)
133
+ (ミリ秒の格納方法は不明です。コメントの追加データから規則性は見つけれませんでした)
134
134
 
135
135
 
136
136
 

15

 

2022/03/14 13:48

投稿

退会済みユーザー
test CHANGED
@@ -82,7 +82,7 @@
82
82
  0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
83
83
  0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
84
84
  ```
85
- 下のつはバイナリ・日付文字列共に共通なので、上の3つだけから考えるしかなさそうです。
85
+ 下のつはバイナリ・日付文字列共に共通なので、上の3つだけから考えるしかなさそうです。
86
86
 
87
87
  ここで、2021と2022の差 「1」に相当する部分が作れないか探してみます。
88
88
  すると、bの上位3bitで説明できそうですね。

14

 

2022/03/14 13:47

投稿

退会済みユーザー
test CHANGED
@@ -1,5 +1,5 @@
1
1
  # 時・分・秒について
2
- とりえず、当初の質問文に与えられた6つのデータで検証しただけですが、
2
+ とりえず、当初の質問文に与えられた6つの4バイトのデータで検証しただけですが、
3
3
  時・分・秒は、下記のような規則が成り立っているようです。
4
4
 
5
5
  1.質問文の6つの例について、左側に元データの16進数を2進数化したもの、右側に時刻表現を並べました。

13

 

2022/03/14 13:46

投稿

退会済みユーザー
test CHANGED
@@ -121,7 +121,7 @@
121
121
 
122
122
  # まとめ
123
123
  ターゲットとなる4バイトを2進数化して先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
124
- ・年 = b の上位3bit(*)に、2016(10進数)を足した数 (* 「aの下位2bit+bの上位3bit」である可能性もあるが、データ不足のため検証不可)
124
+ ・年 = b の上位3bit()に、2016(10進数)を足した数 (「aの下位2bit+bの上位3bit」である可能性もあるが、データ不足のため検証不可)
125
125
  ・月 = d の下位2bit + a の上位2bit
126
126
  ・日 = c の下位3bit + d の上位2bit
127
127
  ・時 = f (4bit)+ c の上位1bit 

12

 

2022/03/14 13:45

投稿

退会済みユーザー
test CHANGED
@@ -121,7 +121,7 @@
121
121
 
122
122
  # まとめ
123
123
  ターゲットとなる4バイトを2進数化して先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
124
- ・年 = b の上位3bitに、2016(10進数)を足した数
124
+ ・年 = b の上位3bit(*)に、2016(10進数)を足した数 (* 「aの下位2bit+bの上位3bit」である可能性もあるが、データ不足のため検証不可)
125
125
  ・月 = d の下位2bit + a の上位2bit
126
126
  ・日 = c の下位3bit + d の上位2bit
127
127
  ・時 = f (4bit)+ c の上位1bit 

11

 

2022/03/14 13:31

投稿

退会済みユーザー
test CHANGED
@@ -43,7 +43,7 @@
43
43
  となっているようです。
44
44
  ```
45
45
  Hour、minute、secondを表す桁を区切ってみました。
46
- <-------- BINARY ---------> |<-------- DATETIME STRING--------->
46
+ <-------- BINARY ---------> |<-------- DATETIME STRING--------->
47
47
  a b d e f [c] g h |
48
48
 
49
49
          mmmm2HHHH H-??? ssss ss:mm1

10

 

2022/03/14 13:30

投稿

退会済みユーザー
test CHANGED
@@ -120,7 +120,7 @@
120
120
  ```
121
121
 
122
122
  # まとめ
123
- ターゲットとなる4バイトを先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
123
+ ターゲットとなる4バイトを2進数化して先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
124
124
  ・年 = b の上位3bitに、2016(10進数)を足した数
125
125
  ・月 = d の下位2bit + a の上位2bit
126
126
  ・日 = c の下位3bit + d の上位2bit

9

 

2022/03/14 13:28

投稿

退会済みユーザー
test CHANGED
@@ -128,6 +128,8 @@
128
128
  ・分 = h の下位2bit + e (4bit)
129
129
  ・秒 = g (4bit) + h の上位2bit
130
130
 
131
+ ※上記において、「+」記号は、前に記述した2進数に、後ろに記述した2進数を連結することを表す。
132
+
131
133
  (ミリ秒の格納方法は不明です。私の力では、コメントの追加データから規則性は見つけれませんでした)
132
134
 
133
135
 

8

まとめ追記

2022/03/14 13:27

投稿

退会済みユーザー
test CHANGED
@@ -119,7 +119,20 @@
119
119
  ※年は2016を足す。
120
120
  ```
121
121
 
122
+ # まとめ
123
+ ターゲットとなる4バイトを先頭から4bitずつ区切ったものを「a, b, c, d, e, f, g, h」とおいたとき:
124
+ ・年 = b の上位3bitに、2016(10進数)を足した数
125
+ ・月 = d の下位2bit + a の上位2bit
126
+ ・日 = c の下位3bit + d の上位2bit
127
+ ・時 = f (4bit)+ c の上位1bit 
128
+ ・分 = h の下位2bit + e (4bit)
129
+ ・秒 = g (4bit) + h の上位2bit
130
+
131
+ (ミリ秒の格納方法は不明です。私の力では、コメントの追加データから規則性は見つけれませんでした)
122
132
 
123
133
 
124
134
 
125
135
 
136
+
137
+
138
+

7

年月日について追加

2022/03/14 13:20

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,5 @@
1
+ # 時・分・秒について
1
- とりえあず途中までかつ質問文に与えられた6つのデータで検証しただけですが、
2
+ とりえあず、当初の質問文に与えられた6つのデータで検証しただけですが、
2
3
  時・分・秒は、下記のような規則が成り立っているようです。
3
4
 
4
5
  1.質問文の6つの例について、左側に元データの16進数を2進数化したもの、右側に時刻表現を並べました。
@@ -67,6 +68,58 @@
67
68
  01000:011101:000001 ===> 08:29:01
68
69
  ```
69
70
 
71
+ # 年月日について
72
+
73
+ 時・分・秒は上の考え方でOKとみなして、時分秒に該当する部分をマスクしたデータを眺めてみましょう。
74
+ ```
75
+ <-------- BINARY ---------> |<-------- DATETIME STRING--------->
76
+ a b d e f [c] g h |
77
+
78
+ 0100 1010 1101 ---- ---- -001 ---- ---- | 2021/05/07
79
+ 0000 1010 1101 ---- ---- -100 ---- ---- | 2021/04/19
80
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
81
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
82
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
83
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
84
+ ```
85
+ 下の3つはバイナリ・日付文字列共に共通なので、上の3つだけから考えるしかなさそうです。
86
+
87
+ ここで、2021と2022の差 「1」に相当する部分が作れないか探してみます。
70
- 年月ミリ秒については続き調査中です。
88
+ すると、bの上位3bitで説明でそうです
89
+ 仮に、「bの上位3bitに2016を足したものが年になる」と仮定して残りの桁を見ていきましょう。
90
+
91
+ ```
92
+ <-------- BINARY ---------> |<-------- DATETIME STRING--------->
93
+ a b d e f [c] g h |
94
+ yyy
95
+ 0100 1010 1101 ---- ---- -001 ---- ---- | 2021/05/07
96
+ 0000 1010 1101 ---- ---- -100 ---- ---- | 2021/04/19
97
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
98
+ ```
99
+ 試行錯誤して、残りの部分で月/日を6つの例と整合する等に説明するとすれば、下記のようになります。
100
+ ・月 => dの下位2bit+aの上位2bit
101
+ ・日 => cの下位3bit+dの上位2bit
102
+ ```
103
+ <-------- BINARY ---------> |<-------- DATETIME STRING--------->
104
+ a b d e f [c] g h |
105
+ 1234 1234 1234 1234 1234 1234 1234 1234 |
106
+ MM2 yyy MM1
107
+ DD2 DDD1
108
+ 0100 1010 1101 ---- ---- -001 ---- ---- | 2021/05/07
109
+ 0000 1010 1101 ---- ---- -100 ---- ---- | 2021/04/19
110
+ 0100 1100 0000 ---- ---- -110 ---- ---- | 2022/01/24
111
+ ```
112
+
113
+ 年月日を並び替えて表示
114
+ ```
115
+ yyy/MMMM/DDDDD
116
+ 101/0101/00111 ===> 5/05/07 
117
+ 101/0100/10011 ===> 5/04/19
118
+ 110/0001/11000 ===> 6/01/24
119
+ ※年は2016を足す。
120
+ ```
71
121
 
72
122
 
123
+
124
+
125
+

6

 

2022/03/14 12:14

投稿

退会済みユーザー
test CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  となっているようです。
43
43
  ```
44
- Hour、miniute、secondを表す桁を区切ってみました。
44
+ Hour、minute、secondを表す桁を区切ってみました。
45
45
  <-------- BINARY ---------> |<-------- DATETIME STRING--------->
46
46
  a b d e f [c] g h |
47
47
 

5

時間も24まであり得るので修正

2022/03/14 12:12

投稿

退会済みユーザー
test CHANGED
@@ -35,9 +35,9 @@
35
35
 
36
36
  3.このようにしたとき、
37
37
 
38
- 時 = f 4bit+cの上位1bit (※fの最上位bitは時間に関係ないかもしれないが、現状の例だけでは不明)
38
+ 時 = f(4bit)+cの上位1bit 
39
- 分 = hの下位2bit+e 4bit
39
+ 分 = hの下位2bit+e(4bit)
40
- 秒 = g4bit+hの上位2bit
40
+ 秒 = g(4bit)+hの上位2bit
41
41
 
42
42
  となっているようです。
43
43
  ```

4

時間を表すHとNibbleを表すhを区別

2022/03/14 12:09

投稿

退会済みユーザー
test CHANGED
@@ -41,11 +41,11 @@
41
41
 
42
42
  となっているようです。
43
43
  ```
44
- hour、miniute、secondを表す桁を区切ってみました。
44
+ Hour、miniute、secondを表す桁を区切ってみました。
45
45
  <-------- BINARY ---------> |<-------- DATETIME STRING--------->
46
46
  a b d e f [c] g h |
47
47
 
48
-         mmmm2hhhh h-??? ssss ss:mm1
48
+         mmmm2HHHH H-??? ssss ss:mm1
49
49
  0100 1010 1101 1011 0010 1-001 0101 10:11 | 2021/05/07 05:59:22,971
50
50
  0000 1010 1101 0001 0100 0-100 0011 11:11 | 2021/04/19 08:49:15,020
51
51
  0100 1100 0000 0101 0011 1-110 0000 00:01 | 2022/01/24 07:21:00,870
@@ -58,7 +58,7 @@
58
58
  時・分・秒を並べかえて表示
59
59
 
60
60
  ```text
61
- hhhhh:mmmmmm:ssssss
61
+ HHHHH:mmmmmm:ssssss
62
62
  00101:111011:010110 ===> 05:59:22
63
63
  01000:110001:001111 ===> 08:49:15
64
64
  00111:010101:000000 ===> 07:21:00

3

秒の上限について考えが至っていなかったのを修正

2022/03/14 12:07

投稿

退会済みユーザー
test CHANGED
@@ -37,34 +37,34 @@
37
37
 
38
38
  時 = f 4bit+cの上位1bit (※fの最上位bitは時間に関係ないかもしれないが、現状の例だけでは不明)
39
39
  分 = hの下位2bit+e 4bit
40
- 秒 = gの下位3bit(又は4bit?)+hの上位2bit
40
+ 秒 = g4bit+hの上位2bit
41
41
 
42
42
  となっているようです。
43
43
  ```
44
44
  hour、miniute、secondを表す桁を区切ってみました。
45
45
  <-------- BINARY ---------> |<-------- DATETIME STRING--------->
46
- a b d e f [c] g h |
46
+ a b d e f [c] g h |
47
47
 
48
-         mmmm2hhhh h-??? ?:sss ss:mm1
48
+         mmmm2hhhh h-??? ssss ss:mm1
49
- 0100 1010 1101 1011 0010 1-001 0:101 10:11 | 2021/05/07 05:59:22,971
49
+ 0100 1010 1101 1011 0010 1-001 0101 10:11 | 2021/05/07 05:59:22,971
50
- 0000 1010 1101 0001 0100 0-100 0:011 11:11 | 2021/04/19 08:49:15,020
50
+ 0000 1010 1101 0001 0100 0-100 0011 11:11 | 2021/04/19 08:49:15,020
51
- 0100 1100 0000 0101 0011 1-110 0:000 00:01 | 2022/01/24 07:21:00,870
51
+ 0100 1100 0000 0101 0011 1-110 0000 00:01 | 2022/01/24 07:21:00,870
52
- 0100 1100 0000 0101 0011 1-110 0:010 00:10 | 2022/01/24 07:37:08,310
52
+ 0100 1100 0000 0101 0011 1-110 0010 00:10 | 2022/01/24 07:37:08,310
53
- 0100 1100 0000 0101 0100 0-110 0:100 00:00 | 2022/01/24 08:05:16,079
53
+ 0100 1100 0000 0101 0100 0-110 0100 00:00 | 2022/01/24 08:05:16,079
54
- 0100 1100 0000 1101 0100 0-110 0:000 01:01 | 2022/01/24 08:29:01,881
54
+ 0100 1100 0000 1101 0100 0-110 0000 01:01 | 2022/01/24 08:29:01,881
55
55
 
56
56
  ```
57
57
 
58
58
  時・分・秒を並べかえて表示
59
59
 
60
60
  ```text
61
- hhhhh:mmmmmm:sssss
61
+ hhhhh:mmmmmm:ssssss
62
- 00101:111011:10110 ===> 05:59:22
62
+ 00101:111011:010110 ===> 05:59:22
63
- 01000:110001:01111 ===> 08:49:15
63
+ 01000:110001:001111 ===> 08:49:15
64
- 00111:010101:00000 ===> 07:21:00
64
+ 00111:010101:000000 ===> 07:21:00
65
- 00111:100101:01000 ===> 07:37:08
65
+ 00111:100101:001000 ===> 07:37:08
66
- 01000:000101:10000 ===> 08:05:16
66
+ 01000:000101:010000 ===> 08:05:16
67
- 01000:011101:00001 ===> 08:29:01
67
+ 01000:011101:000001 ===> 08:29:01
68
68
  ```
69
69
 
70
70
  年月とミリ秒については、引き続き調査中です。

2

 

2022/03/14 12:04

投稿

退会済みユーザー
test CHANGED
@@ -37,7 +37,7 @@
37
37
 
38
38
  時 = f 4bit+cの上位1bit (※fの最上位bitは時間に関係ないかもしれないが、現状の例だけでは不明)
39
39
  分 = hの下位2bit+e 4bit
40
- 秒 = gの下位3bit+hの上位2bit
40
+ 秒 = gの下位3bit(又は4bit?)+hの上位2bit
41
41
 
42
42
  となっているようです。
43
43
  ```

1

 

2022/03/14 12:02

投稿

退会済みユーザー
test CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  ```
19
19
 
20
- ここで、Nibble(4bitの塊)「c」をNibble「f」の後ろ側に移動させます。
20
+ 2.ここで、**Nibble(4bitの塊)「c」をNibble「f」の後ろ側に移動させます**
21
21
  ```text
22
22
  cをfの後ろに持っていった後:
23
23
  <-------- BINARY ---------> |<-------- DATETIME STRING--------->
@@ -33,13 +33,13 @@
33
33
 
34
34
  ```
35
35
 
36
- このようにしたとき、
36
+ 3.このようにしたとき、
37
37
 
38
38
  時 = f 4bit+cの上位1bit (※fの最上位bitは時間に関係ないかもしれないが、現状の例だけでは不明)
39
39
  分 = hの下位2bit+e 4bit
40
40
  秒 = gの下位3bit+hの上位2bit
41
41
 
42
- となっていす。
42
+ となっているようです。
43
43
  ```
44
44
  hour、miniute、secondを表す桁を区切ってみました。
45
45
  <-------- BINARY ---------> |<-------- DATETIME STRING--------->