通过SDK获取结果如下,部分字段省略
HCNetSDK$NET_DVR_DEVICECFG(allocated@0x20531880 (132 bytes)) {
byte sDVRName[32]@4=[B@17d10166
byte sSerialNumber[48]@2c=[B@1b9e1916
int dwSoftwareVersion@5c=84279301
int dwSoftwareBuildDate@60=1313815
int dwDSPSoftwareVersion@64=458755
int dwDSPSoftwareBuildDate@68=132319498
}
// 设备名称sDVRName和设备序列号sSerialNumber解析还算容易
System.out.println(new String(userCfg.sDVRName, "GBK").trim());
System.out.println(new String(userCfg.sSerialNumber).trim());
打开在线进制转换工具
1、主控版本由dwSoftwareVersion软件版本号和dwSoftwareBuildDate软件生成日期组成,解析步骤如下:
软件版本号84279301 从10进制转成16进制字符串“5060005”,然后把中间连续0替换成.就是版本“5.6.5”。
软件生成日期1313815 从10进制转成16进制字符串“140c17”,0x14代表20年,0x0c代表12月,0x17代表23日。
2、编码版本由DSP软件版本dwDSPSoftwareVersion和DSP软件生成日期dwDSPSoftwareBuildDate组合解析:
DSP软件版本解析通软件版本号解析过程,458755 从10进制转成16进制字符串“70003”,然后把中间连续0替换成.就是版本“7.3”。
DSP软件生成日期132319498 从10进制转成16进制字符串“7e3090a”,0x07e3就是2019年,0x09 转换成10进制的9月,0x0a 转换成10进制的10日。
官方提供的解析代码
// 主控版本解析
public static String sSoftWareVersionFormat(Integer dwSoftwareVersion,Integer dwSoftwareBuildDate) {
String sSoftWareVersion;//软件版本
if (((dwSoftwareVersion >> 24) & 0xFF) > 0) {
sSoftWareVersion = String.format("V%d.%d.%d build %02d%02d%02d", (dwSoftwareVersion >> 24) & 0xFF, (dwSoftwareVersion >> 16) & 0xFF, dwSoftwareVersion & 0xFFFF, (dwSoftwareBuildDate >> 16) & 0xFFFF, (dwSoftwareBuildDate >> 8) & 0xFF, dwSoftwareBuildDate & 0xFF);
} else {
sSoftWareVersion = String.format("V%d.%d build %02d%02d%02d", (dwSoftwareVersion >> 16) & 0xFFFF, dwSoftwareVersion & 0xFFFF, (dwSoftwareBuildDate >> 16) & 0xFFFF, (dwSoftwareBuildDate >> 8) & 0xFF, dwSoftwareBuildDate & 0xFF);
}
return sSoftWareVersion;
}
// 编码版本解析
public static String sDSPSoftVersionFormat(Integer dwDSPSoftwareVersion,Integer dwDSPSoftwareBuildDate) {
String sDSPSoftVersion;//DSP软件版本
sDSPSoftVersion = String.format("V%d.%d build %02d%02d%02d", (dwDSPSoftwareVersion >> 16) & 0xFFFF, dwDSPSoftwareVersion & 0xFFFF, ((dwDSPSoftwareBuildDate >> 16) & 0xFFFF)-2000, (dwDSPSoftwareBuildDate >> 8) & 0xFF, dwDSPSoftwareBuildDate & 0xFF);
return sDSPSoftVersion;
}
// 版本单独解析
public static String parseVersion(int version) {
String sSoftWareVersion;
if (((version >> 24) & 0xFF) > 0){
sSoftWareVersion = String.format("V%d.%d.%d", (version >> 24) & 0xFF, (version >> 16) & 0xFF, version & 0xFFFF);
} else {
sSoftWareVersion = String.format("V%d.%d", (version >> 16) & 0xFFFF, version & 0xFFFF);
}
return sSoftWareVersion;
}
// 日期单独解析
public static String parseBuildDate(int a){
int year = (a >> 16);
year = (year>2000)?(year-2000):year;
int month = (a & 0xffff) >> 8 & 0xFF;
int day = a & 0xff;
return String.format("build %02d%02d%02d", year, month, day);
}
public static void main(String[] args) {
// 官方一
System.out.println(parseVersion(84279301)+" "+parseBuildDate(1313815)); // V5.6.5 build 201223
System.out.println(parseVersion(458755)+" "+parseBuildDate(132319498)); // V7.3 build 190910
// 官方二
System.out.println(sSoftWareVersionFormat(84279301,1313815)); // V5.6.5 build 201223
System.out.println(sDSPSoftVersionFormat(458755,132319498)); // V7.3 build 190910
}
主控版本属性:NET_DVR_GET_FIRMWARE_VERSION