GOST 33464中对MSD数据(minimum set of data)的结构规定是用ASN.1语法描述的。下面以version2版本为例分析MSD数据结构,并给出一种可能的实际数据结构示例。

首先是GOST 33464: 2015附录C.3, C.5中的描述:

序号 参数名 参数类型及范围
1   ID INTEGER
(1...255)
2   Message Identifier INTEGER
(1...255)
3 Control Automatic Activation BOOLEAN
4 Test Call BOOLEAN
5 Position Can Be Trusted BOOLEAN
6 Vehicle Type ENUM
7 VIN STRING(17)
8 Vehicle Propulsion Storage Type Gasoline Tank Present BOOLEAN
9 Diesel Tank Present BOOLEAN
10 Compressed Natural Gas BOOLEAN
11 Liquid Propane Gas BOOLEAN
12 Electric Energy Storage BOOLEAN
13 Hydrogen Storage BOOLEAN
14   Time Stamp INTEGER
(0..2^32-1)
15 Vehicle Location Position Latitude INTEGER
(-2^31...2^31-1)
16 Position Longitude INTEGER
(-2^31...2^31-1)
17   Vehicle Direction INTEGER
(0...255)
18 Recent Vehicle Location N1 Latitude Delta INTEGER
(-512...511)
19 Longitude Delta INTEGER
(-512...511)
20 Recent Vehicle Location N2 Latitude Delta INTEGER
(-512...511)
21 Longitude Delta INTEGER
(-512...511)
22   Number Of Passengers INTEGER
(0...255)
23 Optional Additional Data oid RELATIVE
OID
24 data OCTET
STRING
MSDASN1Module_V2
DEFINITIONS
AUTOMATIC TAGS ::=
BEGIN
-- MSD specification version
CurrentId::= INTEGER (2)
-- ECallMessage is an upper level data element
-- It supports one message type only (msd)
-- Elements:
-- id: MSD data format, set to 1
-- msd: minimum set of data transmitted from IVDS side, except for ID
ECallMessage ::= SEQUENCE {
msdVersion INTEGER(0…255),
msd OCTET STRING (CONTAINING MSDMessage)
}
-- Message sent from IVDS side (ID is excluded)
-- Elements:
-- msdStructure: main MSD structure
-- optionalAdditionalData: additional data
-- May be extended at this level in future versions
MSDMessage ::= SEQUENCE {
msdStructure MSDStructure,
optionalAdditionalData AdditionalData OPTIONAL,
...
}
-- Main MSD structure without any additional data
-- Elements:
-- messageldentifier: message identifier
-- control: see ControlType
-- vehicleldentificationNumber: see VIN
-- vehiclePropulsionStorageType: see VehiclePropulsionStorageType
-- timestamp: time stamp
-- vehicleLocation: see VehicleLocation
-- vehicleDirection: vehicle direction-- recentVehicleLocationNl: displacement from current vehicle location
-- see VehicleLocationDelta
-- recentVehicleLocationN2: displacement from
-- recentVehicleLocationN1 see VehicleLocationDelta
-- numberOfPassengers: minimum known number
-- of fastened safety belts
MSDStructure ::= SEQUENCE {
messageIdentifier INTEGER(0 ... 255),
control ControlType,
vehicleIdentificationNumber VIN,
vehiclePropulsionStorageType VehiclePropulsionStorageType,
timestamp INTEGER(0 ... 4294967295),
vehicleLocation VehicleLocation,
vehicleDirection INTEGER(0 ... 255),
recentVehicleLocationN1 VehicleLocationDelta OPTIONAL,
recentVehicleLocationN2 VehicleLocationDelta OPTIONAL,
numberOfPassengers INTEGER(0 ... 255) OPTIONAL,
...
}
-- ControlType includes the following elements:
-- automaticActivation: true, false
-- testCall: true, false
-- positionCanBeTrusted: true, false
-- vehicleType: see VehicleType
ControlType ::= SEQUENCE {
automaticActivation BOOLEAN,
testCall BOOLEAN,
positionCanBeTrusted BOOLEAN,
vehicleType VehicleType
}
-- Vehicle type definition
VehicleType ::= ENUMERATED{
passengerVehicleClassM1 (1),
busesAndCoachesClassM2 (2),
busesAndCoachesClassM3 (3),
lightCommercialVehiclesClassN1 (4),
heavyDutyVehiclesClassN2 (5),
heavyDutyVehiclesClassN3 (6),
motorcyclesClassL1e (7),
motorcyclesClassL2e (8),
motorcyclesClassL3e (9),
motorcyclesClassL4e (10),
motorcyclesClassL5e (11),
motorcyclesClassL6e (12),
motorcyclesClassL7e (13),
...
}
-- Vehicle Identification Number (VIN)
VIN::= SEQUENCE{
isowmi PrintableString (SIZE(3))
(FROM("A".."H"|"J".."N"|"P"|"R".."Z"|"0".."9")),
isovds PrintableString (SIZE(6))
(FROM("A".."H"|"J".."N"|"P"|"R".."Z"|"0".."9")),
isovisModelyear PrintableString (SIZE(l))
(FROM("A".."H"|"J".."N"|"P"|"R".."Z"|"0".."9")),
isovisSeqPlant PrintableString (SIZE(7))
(FROM("A".."H"|"J".."N"|"P"|"R".."Z"|"0".."9")),
}
-- VehiclePropulsionStorageType:
-- Fuel (energy source) type used for vehicle
VehiclePropulsionStorageType ::= SEQUENCE {
gasolineTankPresent BOOLEAN DEFAULT FALSE,
dieselTankPresent BOOLEAN DEFAULT FALSE,
compressedNaturalGas BOOLEAN DEFAULT FALSE,
liquidPropaneGas BOOLEAN DEFAULT FALSE,
electricEnergyStorage BOOLEAN DEFAULT FALSE,
hydrogenStorage BOOLEAN DEFAULT FALSE,
otherStorage BOOLEAN DEFAULT FALSE,
...
}
-- VehicleLocation:
-- Current vehicle location
-- Elements:
-- Latitude – 32 bits (4 octets) allocated
-- Longitude – 32 bits (4 octets) allocated
VehicleLocation ::= SEQUENCE {
positionLatitude INTEGER (-2147483648..2147483647),
positionLongitude INTEGER (-2147483648..2147483647)
}
-- VehicleLocationDelta:
-- Vehicle location before an RTA event was detected
VehicleLocationDelta ::= SEQUENCE {
latitudeDelta INTEGER (-512..511),
longitudeDelta INTEGER (-512..511)
}
-- AdditionalData:
-- Any additional data encoded as a separate definition
-- Elements:
-- oid: object identifier defining data format and purpose
-- data: additional data in the format
-- defined by oid
AdditionalData ::= SEQUENCE {
oid RELATIVE-OID,
data OCTET STRING
}
END

在分析MSD数据结构之前,首先需要了解一些基本的ASN.1语法规则,可参考文档《ASN.1编码规则详解(最全最经典)》中2.2节,2.3节,2.4节,2.6节,2.8节,2.9节,2.10节中的2.10.2(重要!),以及其他读者认为有必要提前阅读的章节。

其次,还需要了解编码规则。GOST 33464中规定的MSD数据是按UPER编码的,可参考文档《ASN.1编码规则详解(最全最经典)》中的3.3节。特别需要阅读的是,涉及到MSD的相关数据类型的编码说明(在3.3.6节中),如BOOLEAN型、INTEGER型、ENUMERATED型、RELATIVE-OID型、字符串与日期型、SEQUENCE型等。


举例:

SEQUENCE类型

首先,如果有 COMPONENTS OF 语句,则由相应的类型进行替换。
        如果 SEQUENCE 类型是可扩展的,则在编码的头部加上一个比特的 bit-field,如果SEQUENCE 的取值中有属于扩展附加部分的成员,则该比特等于 1,否则等于 0。如果 SEQUENCE 的定义中在扩展根部( extension root)有"n"个成员被置为OPTIONAL 或 DEFAULT,则在编码头部再添加"n"个比特的 bit-field,该 bit-field从第一个 bit 开始,依次指示被标记为 OPTIONAL 或 DEFAULT 的成员是否出现。如果为 1,则该成员出现,否则没有出现。如果“ n”小于 64K,则这个 bit-field 应该直接添到码流中。如果"n"大于等于 64K, 按照前面提到的处理方法把“ n”个bit 的 bit-field 分段并添加到域序列中,前面的长度字段 L 就作为一个有约束的整数编码,而约束的上限和下限都等于 n。


接下来就可以具体分析GOST 33465 附录C.5中对MSD数据的具体规定了。

注意:关于OID的分析需要参考文档ISO/IEC 8825-2的第33章节。(这块还没仔细看,待补充...)

分析完后,一种可能的MSD数据结构为(不说是一定,是因为按照ASN.1描述,部分指示位、数据位有可能不存在。此处只列举一种可能性供读者参考):

序号 Byte Bit 所属域 含义   备注
1 0 7 协议版本     如为GOST 33464协议,则必须设置为:0x02
2 6    
3 5    
4 4    
5 3    
6 2    
7 1    
8 0    
9 1 7 MSD数据内容长度     表示从第2个字节之后(即从该字节之后)的数据长度
10 6    
11 5    
12 4    
13 3    
14 2    
15 1    
16 0    
17 2 7   Extension of MSDMessage 0:Absent    1:Present  
18 6   optionalAdditionalData 0:Absent    1:Present
19 5   Extension of MSDStructure Present? 0:Absent    1:Present
20 4   recentVehicleLocationN1 0:Absent    1:Present
21 3   recentVehicleLocationN2 0:Absent    1:Present
22 2   numberOfPassengers 0:Absent    1:Present
23 1 Message Identifier Message Identifier bit7   Msg ID是否仅包含8 bits,待确认
24 0 Message Identifier bit6  
25 3 7 Message Identifier bit5  
26 6 Message Identifier bit4  
27 5 Message Identifier bit3  
28 4 Message Identifier bit2  
29 3 Message Identifier bit1  
30 2 Message Identifier bit0  
31 1 Control Automatic Activation    
32 0 Test Call    
33 4 7 Position Can Be Trusted    
34 6 Vehicle Type VehicleType Enum value from   前导(Preamble)bit,当值在根部分时,该bit为0,否则为1.
35 5 Vehicle Type - passenger vehicle (Category M1)
- buses (Category M2)
- buses (Category M3)
- light trucks (Category N1)
- cargo vehicles (Category N2)
- cargo vehicles (Category N3)
- motor cycles (Category L1e)
- motor cycles (Category L2e)
- motor cycles (Category L3e)
- motor cycles (Category L4e)
- motor cycles (Category L5e)
- motor cycles (Category L6e)
- motor cycles (Category L7e)
- ……
枚举类型值(可扩展类型)
36 4
37 3
38 2
39 1 VIN VIN[0]   1)每6 bits表示1位VIN码。
2)VIN码的编码不是ASIC II码。编码值对应关系见“VIN码编码值对照表”。
40 0  
41 5 7  
42 6  
43 5  
44 4  
45 3 VIN[1]    
46 2    
47 1    
48 0    
49 6 7    
50 6    
51 5 VIN[2]    
52 4    
53 3    
54 2    
55 1    
56 0    
57 7 7 VIN[3]    
58 6    
59 5    
60 4    
61 3    
62 2    
63 1 VIN[4]    
64 0    
65 8 7    
66 6    
67 5    
68 4    
69 3 VIN[5]    
70 2    
71 1    
72 0    
73 9 7    
74 6    
75 5 VIN[6]    
76 4    
77 3    
78 2    
79 1    
80 0    
81 10 7 VIN[7]    
82 6    
83 5    
84 4    
85 3    
86 2    
87 1 VIN[8]    
88 0    
89 11 7    
90 6    
91 5    
92 4    
93 3 VIN[9]    
94 2    
95 1    
96 0    
97 12 7    
98 6    
99 5 VIN[10]    
100 4    
101 3    
102 2    
103 1    
104 0    
105 13 7 VIN[11]    
106 6    
107 5    
108 4    
109 3    
110 2    
111 1 VIN[12]    
112 0    
113 14 7    
114 6    
115 5    
116 4    
117 3 VIN[13]    
118 2    
119 1    
120 0    
121 15 7    
122 6    
123 5 VIN[14]    
124 4    
125 3    
126 2    
127 1    
128 0    
129 16 7 VIN[15]    
130 6    
131 5    
132 4    
133 3    
134 2    
135 1 VIN[16]    
136 0    
137 17 7    
138 6    
139 5    
140 4    
141 3 Vehicle Propulsion Storage Type Extension of Vehicle Propulsion Storage Type Present? 0:Absent    1:Present  
142 2 Gasoline Tank Present? 0:Absent    1:Present 1)每个bit表示后面对应的指示位是否存在

2)设置为(二进制):
111 1111

143 1 Diesel Tank Present? 0:Absent    1:Present
144 0 Compressed Natural Gas Present? 0:Absent    1:Present
145 18 7 Liquid Propane Gas Present? 0:Absent    1:Present
146 6 Electric Energy Storage Present? 0:Absent    1:Present
147 5 Hydrogen Storage Present? 0:Absent    1:Present
148 4 Other Storage Present? 0:Absent    1:Present
149 3 Gasoline Tank 0:Absent    1:Present  
150 2 Diesel Tank 0:Absent    1:Present  
151 1 Compressed Natural Gas 0:Absent    1:Present  
152 0 Liquid Propane Gas 0:Absent    1:Present  
153 19 7 Electric Energy Storage 0:Absent    1:Present  
154 6 Hydrogen Storage 0:Absent    1:Present  
155 5 Other Storage 0:Absent    1:Present  
156 4 time Stamp time Stamp bit31   1)time stamp值为从1970年1月1日开始,到RTA发生是的秒数。

2)如果时间超出合理范围,测试仪器会将time stamp清零显示。

157 3 time Stamp bit30  
158 2 time Stamp bit29  
159 1 time Stamp bit28  
160 0 time Stamp bit27  
161 20 7 time Stamp bit26  
162 6 time Stamp bit25  
163 5 time Stamp bit24  
164 4 time Stamp bit23  
165 3 time Stamp bit22  
166 2 time Stamp bit21  
167 1 time Stamp bit20  
168 0 time Stamp bit19  
169 21 7 time Stamp bit18  
170 6 time Stamp bit17  
171 5 time Stamp bit16  
172 4 time Stamp bit15  
173 3 time Stamp bit14  
174 2 time Stamp bit13  
175 1 time Stamp bit12  
176 0 time Stamp bit11  
177 22 7 time Stamp bit10  
178 6 time Stamp bit9  
179 5 time Stamp bit8  
180 4 time Stamp bit7  
181 3 time Stamp bit6  
182 2 time Stamp bit5  
183 1 time Stamp bit4  
184 0 time Stamp bit3  
185 23 7 time Stamp bit2  
186 6 time Stamp bit1  
187 5 time Stamp bit0  
188 4 Vehicle Location Position Latitude Position Latitude bit31 1)Position计算时有偏移量,偏移量为:-2147483648

2)注意前面有Position Can be Trusted位

3)计算算法参考GOST 33464协议

189 3 Position Latitude bit30
190 2 Position Latitude bit29
191 1 Position Latitude bit28
192 0 Position Latitude bit27
193 24 7 Position Latitude bit26
194 6 Position Latitude bit25
195 5 Position Latitude bit24
196 4 Position Latitude bit23
197 3 Position Latitude bit22
198 2 Position Latitude bit21
199 1 Position Latitude bit20
200 0 Position Latitude bit19
201 25 7 Position Latitude bit18
202 6 Position Latitude bit17
203 5 Position Latitude bit16
204 4 Position Latitude bit15
205 3 Position Latitude bit14
206 2 Position Latitude bit13
207 1 Position Latitude bit12
208 0 Position Latitude bit11
209 26 7 Position Latitude bit10
210 6 Position Latitude bit9
211 5 Position Latitude bit8
212 4 Position Latitude bit7
213 3 Position Latitude bit6
214 2 Position Latitude bit5
215 1 Position Latitude bit4
216 0 Position Latitude bit3
217 27 7 Position Latitude bit2
218 6 Position Latitude bit1
219 5 Position Latitude bit0
220 4 Position Longitude Position Longitude bit 31 1)Position计算时有偏移量,偏移量为:-2147483648

2)注意前面有Position Can be Trusted位

3)计算算法参考GOST 33464协议

221 3 Position Longitude bit 30
222 2 Position Longitude bit 29
223 1 Position Longitude bit 28
224 0 Position Longitude bit 27
225 28 7 Position Longitude bit 26
226 6 Position Longitude bit 25
227 5 Position Longitude bit 24
228 4 Position Longitude bit 23
229 3 Position Longitude bit 22
230 2 Position Longitude bit 21
231 1 Position Longitude bit 20
232 0 Position Longitude bit 19
233 29 7 Position Longitude bit 18
234 6 Position Longitude bit 17
235 5 Position Longitude bit 16
236 4 Position Longitude bit 15
237 3 Position Longitude bit 14
238 2 Position Longitude bit 13
239 1 Position Longitude bit 12
240 0 Position Longitude bit 11
241 30 7 Position Longitude bit 10
242 6 Position Longitude bit 9
243 5 Position Longitude bit 8
244 4 Position Longitude bit 7
245 3 Position Longitude bit 6
246 2 Position Longitude bit 5
247 1 Position Longitude bit 4
248 0 Position Longitude bit 3
249 31 7 Position Longitude bit 2
250 6 Position Longitude bit 1
251 5 Position Longitude bit 0
252 4 Vehicle Direction Vehicle Direction bit7   1)GOST 33464中规定分辨率为2°,但测试仪器没有进行分辨率的处理。
253 3 Vehicle Direction bit6  
254 2 Vehicle Direction bit5  
255 1 Vehicle Direction bit4  
256 0 Vehicle Direction bit3  
257 32 7 Vehicle Direction bit2  
258 6 Vehicle Direction bit1  
259 5 Vehicle Direction bit0  
260 4 recentVehicleLocationN1 Latitude Recent Vehicle Location N1 Lat bit9 1)偏移量:-512
2)注意前面有recentVehicleLocationN1标志位
261 3 Recent Vehicle Location N1 Lat bit8
262 2 Recent Vehicle Location N1 Lat bit7
263 1 Recent Vehicle Location N1 Lat bit6
264 0 Recent Vehicle Location N1 Lat bit5
265 33 7 Recent Vehicle Location N1 Lat bit4
266 6 Recent Vehicle Location N1 Lat bit3
267 5 Recent Vehicle Location N1 Lat bit2
268 4 Recent Vehicle Location N1 Lat bit1
269 3 Recent Vehicle Location N1 Lat bit0
270 2 Longitude Recent Vehicle Location N1 Long bit9
271 1 Recent Vehicle Location N1 Long bit8
272 0 Recent Vehicle Location N1 Long bit7
273 34 7 Recent Vehicle Location N1 Long bit6
274 6 Recent Vehicle Location N1 Long bit5
275 5 Recent Vehicle Location N1 Long bit4
276 4 Recent Vehicle Location N1 Long bit3
277 3 Recent Vehicle Location N1 Long bit2
278 2 Recent Vehicle Location N1 Long bit1
279 1 Recent Vehicle Location N1 Long bit0
280 0 recentVehicleLocationN2 Latitude Recent Vehicle Location N2 Lat bit9 1)偏移量:-512
2)注意前面有recentVehicleLocationN2标志位
281 35 7 Recent Vehicle Location N2 Lat bit8
282 6 Recent Vehicle Location N2 Lat bit7
283 5 Recent Vehicle Location N2 Lat bit6
284 4 Recent Vehicle Location N2 Lat bit5
285 3 Recent Vehicle Location N2 Lat bit4
286 2 Recent Vehicle Location N2 Lat bit3
287 1 Recent Vehicle Location N2 Lat bit2
288 0 Recent Vehicle Location N2 Lat bit1
289 36 7 Recent Vehicle Location N2 Lat bit0
290 6 Longitude Recent Vehicle Location N2 Long bit9
291 5 Recent Vehicle Location N2 Long bit8
292 4 Recent Vehicle Location N2 Long bit7
293 3 Recent Vehicle Location N2 Long bit6
294 2 Recent Vehicle Location N2 Long bit5
295 1 Recent Vehicle Location N2 Long bit4
296 0 Recent Vehicle Location N2 Long bit3
297 37 7 Recent Vehicle Location N2 Long bit2
298 6 Recent Vehicle Location N2 Long bit1
299 5 Recent Vehicle Location N2 Long bit0
300 4 Number of passengers Number of passeners bit7   1)注意前面有numberOfPassengers标志位
301 3 Number of passengers bit6  
302 2 Number of passeners bit5  
303 1 Number of passeners bit4  
304 0 Number of passengers bit3  
305 38 7 Number of passeners bit2  
306 6 Number of passeners bit1  
307 5 Number of passengers bit0  
308 4        
309 3        
310 2        
311 1        
312 0        

更详细的分析过程待有时间补充。


文中列举的参考文档下载链接为:

链接:https://pan.baidu.com/s/1ETGxVC0G3LTF9YS9Ub6uLA 
提取码:0q5i


ecall GOST 33464 MSD数据结构分析 —— 根据ASN.1语法相关推荐

  1. 【Android 逆向】函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

    文章目录 一.GOT 表数据结构分析 二.函数根据 GOT 表进行跳转的流程 一.GOT 表数据结构分析 GOT 表分为 222 部分 , 一部分在 调用者部分 ( 可执行文件 ) 中 , 一部分在 ...

  2. ffplay的数据结构分析

    <ffplay分析(从启动到读取线程的操作)> <ffplay分析(视频解码线程的操作)> <ffplay分析(音频解码线程的操作)> <ffplay 分析( ...

  3. 硬盘扇区数据结构分析

    来自 http://hi.baidu.com/qtycr/blog/item/f6cc9b2b74e2d7fee7cd40da.html 硬盘扇区数据结构分析 初买来一块硬盘,我们是没有办法使用的,你 ...

  4. 音视频从入门到精通——FFmpeg数据结构分析

    FFmpeg数据结构分析 FFmpeg解码流程 重要结构体之间的关系 AVFormatContext iformat:输入媒体的AVInputFormat,比如指向AVInputFormat ff_f ...

  5. 数据结构分析:红黑树、B+树

    数据结构分析:红黑树.B+树 前言 常见的数据结构大概分为以下8种,作为一个开发人员,数据结构是内功之一. 本文参考了网络上相关知识,加之自己的理解.简单说明红黑树.B+树的特性. 1. 二叉搜索树( ...

  6. MYSEE:Sp数据结构分析初稿

    以前写了MYSEE 服务器端源码分析文档,主要是对其中的消息机制(sp,cp,ts,之间的交互)的分析.因为CU抽风,发表的文章无故给我删除了 ,所以这个不是完整的 Sp 数据结构分析(初稿) 一:准 ...

  7. 商品分类目录数据结构分析

    商品分类目录数据结构分析 说明:一般电商网站的商品分类信息,都是3级标题. 划分: 1级标题-2级标题-3级标题 标题是有所属关系的 /1.查询一级商品分类信息/ SELECT * FROM tb_i ...

  8. SICK LMS511开发及数据结构分析、坐标转换

    SICK LMS511开发及数据结构分析.坐标转换 最近公司有新上的项目,开始接触激光扫描仪,型号SICK LMS511. 获取数据 在网上看了一些资料,有通过SICK自带的软件看了一下激光扫描仪的配 ...

  9. 【JAVA进阶】java中的集合(番外篇3)- HashMap源码底层数据结构分析

    写在前面的话 脑子是个好东西,可惜的是一直没有搞懂脑子的内存删除机制是什么,所以啊,入行多年,零零散散的文章看了无数,却总是学习了很多也忘了很多. 痛定思痛的我决定从今天开始系统的梳理下知识架构,记录 ...

最新文章

  1. m_Orchestrate learning system---九、在无法保证是否有图片的情况下,如何保证页面格式...
  2. 关于串口接收数据不全的问题
  3. 【Shell脚本】颜色显示
  4. linux 解决依赖性错误,linux – 由于单模块依赖性,XSP配置失败
  5. python 播放声音_如何用Python播放声音?
  6. Codeforces 527C Glass Carving
  7. 近期将要学习的内容(flag)
  8. linux下如何添加定时备份任务,Linux下Oracle设置定时任务备份数据库的教程
  9. 1. C++dump编程
  10. 华悦网游器软件介绍及功能介绍
  11. 粒子滤波随机采样算法
  12. 安装了360安全卫士和瑞星杀毒,看迅雷电影很卡,谁有知道的
  13. CSS3(新增样式)
  14. 2007年五一通过了驾驶证考试(5/7,5/8)
  15. 新型搜索引擎Blekko欲赶超谷歌 再获3000万美元投资
  16. 最简单理解高内聚低耦合
  17. 互联网、因特网及万维网之间的区别与联系
  18. 软键盘弹起后顶起EditText的完美解决方案
  19. 《蹭课神器》项目总结
  20. SCA(Service Component Architecture)编程模型入门

热门文章

  1. SSM 配置 Swagger2 接口文档引擎
  2. 短信中出现的短网址有危险吗?
  3. 每个老板心里都有一个波斯顿矩阵
  4. 牛客竞赛每日俩题 - Day12
  5. 渠道广告联盟SDK接入思路总结
  6. Gif动画怎么在线制作?快试试这款gif在线制作工具
  7. 283、无线网桥的连接方式有哪些?多条宽带如何叠加
  8. pytorch实现图像的腐蚀和膨胀
  9. 系统清理优化工具:CCleaner
  10. UV,PV,VV是啥?