当前位置: 首页 > news >正文

做网站要哪些人员地方生活门户网站名称

做网站要哪些人员,地方生活门户网站名称,搭建一个自己的网站,安徽省建设工程管理信息网【写在前面】 最近工作中需要解析 Cat 21 和 Cat 62 的 ADS-B 数据 ( 自己的工作包含航空领域 )。 然后#xff0c;因为整个 Asterix 协议类别非常之多#xff0c;每个类别的版本也多#xff0c;纯手工实现每个版本解析根本不现实 ( 然鹅公司之前的解析库就是这么做的且做的…【写在前面】 最近工作中需要解析 Cat 21 和 Cat 62 的 ADS-B 数据 ( 自己的工作包含航空领域 )。 然后因为整个 Asterix 协议类别非常之多每个类别的版本也多纯手工实现每个版本解析根本不现实 ( 然鹅公司之前的解析库就是这么做的且做的太烂 )。 于是花了很多时间去寻找一个好用的解析库比如 Wireshark 的 Asterix 解析部分 ( 可惜因为是插件有点难移出来 )。 最后找了很久( Asterix 好像应用比较局限资料实在太少 )终于找到一个实现相当良好的工具AsterixInspector 一个显示Asterix数据文件内容的工具https://asterix.sourceforge.net/        基于该工具我将核心部分移植出来并进行简化最终实现 Asterix数据报文解析库。https://github.com/mengps/AsterixParser 【正文开始】 该库目前支持的类别有 - Cat1 (track UAP only)   - Cat2   - Cat4   - Cat7 (downlink UAP only)   - Cat8   - Cat10   - Cat11   - Cat20   - Cat21   - Cat23   - Cat34   - Cat48   - Cat62   - Cat63   - Cat64   - Cat65   - Cat240   - Cat247 因为自己做的工作仅仅是包装得更好用罢了所以这里简单讲一下用法即可( 偷懒直接用了我的注释 ) SimpleAsterixRecordBlock 是报文解析后数据项的存储块。 /*** brief The SimpleAsterixRecordBlock struct*/ struct SimpleAsterixRecordBlock {/*! [字段引用编号] */int frn;/*! [数据项ID,例如(I062/070)] */QString id;/*! [数据项名称] */QString name;/*! [数据项原始值] */QByteArray rawValue;/*! [数据项刻度] */qreal scale;/*! [数据项单位] */QString unit;/*! [数据项实际值] */QVariant value;/*! [子数据块列表] */QListSimpleAsterixRecordBlock subBlock; }; SimpleReservedExpansionField 是报文数据项 [RE] 解析后的存储块 ( 目前只支持Cat 21 )。 /*** brief The SimpleReservedExpansionField struct*/ struct SimpleReservedExpansionField {struct SubField {/*! [字段名称] */QString name;/*! [字段原始值] */QByteArray value;};/*! [字段类型] */quint8 type 0;/*! [子字段列表] */QListSubField subField; }; AsterixParser 提供的接口 /*** brief getCategory 获取类别* param asterixData Asterix数据包* return int*/int getCategory(const uchar *asterixData);/*** brief getU8 字节转U8* param data 原始字节* return quint8*/quint8 getU8(const QByteArray data);/*** brief getU16 字节转U16* param data 原始字节* return quint16*/quint16 getU16(const QByteArray data);/*** brief getU32 字节转U32* param data 原始字节* return quint32*/quint32 getU32(const QByteArray data);/*** brief parseToFsnMap 解析为{fsn, block}映射* param asterixData Asterix数据包* return QMapint, SimpleAsterixRecordBlock*/QMapint, SimpleAsterixRecordBlock parseToFsnMap(const uchar *asterixData);/*** brief parseToIdMap 解析为{id, block}映射* param asterixData Asterix数据包* return QMapint, SimpleAsterixRecordBlock*/QMapQString, SimpleAsterixRecordBlock parseToIdMap(const uchar *asterixData);/*** brief parseReservedExpansionField 解析保留扩展字段* warning 目前仅实现[cat021]* param cat 类别* param ref 扩展字段记录块* return QMapint, SimpleReservedExpansionField*/QMapint, SimpleReservedExpansionField parseReservedExpansionField(int cat, const SimpleAsterixRecordBlock ref); 【使用示例】 使用起来就非常简单了 #include QCoreApplication #include QDebug #include QtEndian#include asterixparser.hQString applyUnitAndScale(const QVariant value, qreal scale, const QString unit) {if (qFuzzyCompare(scale, 1))return QString::number(value.toDouble()) (unit.isEmpty() ? : ( unit));elsereturn QString::number(value.toDouble() * scale, f, 10) (unit.isEmpty() ? : ( unit)); }int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);//cat021uchar test[] {0x15, 0x00, 0x35, 0xcb, 0x19, 0x71, 0x11, 0xc1, 0x01, 0x04, 0x16, 0x00, 0x11, 0x44, 0x4c, 0x65, 0x80, 0x09, 0xf1, 0x80, 0x2c, 0x25, 0xd8, 0x59, 0xe5, 0xff, 0xe0, 0x07, 0x4c, 0x65, 0x80, 0x02, 0x7b, 0x2d, 0x35, 0x08, 0x12, 0x00, 0x03, 0x34, 0x81, 0x37, 0xcf, 0x5d, 0xa0, 0x01, 0x07, 0x88, 0x10, 0x01, 0x11, 0x11, 0x02};//cat062/*uchar test[] {0x3e, 0x00, 0x2b, 0x19, 0x31, 0x10, 0x47, 0x88, 0xf6, 0x00, 0x56, 0xfe, 0x34, 0x01, 0x27, 0xad,0x07, 0x00, 0x60, 0x6c, 0x31, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x32, 0xff, 0xe1, 0x01, 0x60, 0x6c,0x31, 0x00, 0x00, 0x00, 0x4e, 0xee, 0x00, 0x93, 0x00, 0x00, 0x00};*/AsterixParser parser(QT_STRINGIFY(PWD_PATH) QString(/../asterixSpecification));auto map parser.parseToFsnMap(test);for (const auto block: map) {qDebug() block.frn block.id block.name block.rawValue;if (!block.subBlock.isEmpty()) {for (const auto subBlock: block.subBlock)qDebug() subBlock.frn subBlock.id subBlock.name subBlock.value applyUnitAndScale(subBlock.value, subBlock.scale, subBlock.unit);}}auto ref_map parser.parseReservedExpansionField(parser.getCategory(test), map[48]);for (const auto ref: ref_map) {for (const auto subField: ref.subField)qDebug() subField.name (subField.value.size() 1 ? (parser.getU8(subField.value)) : (parser.getU16(subField.value)));}return app.exec(); }【效果展示】 Cat 21 解析结果 Cat 62 解析结果 【结语】 关于规范文件生成部分[asterixSpecification] 一般做法是[规范pdf] -  [.ast] → [.xml]具体可以看我的项目主页提供的资料。 项目链接(多多star呀..⭐_⭐) CSDN 的 https://download.csdn.net/download/u011283226/88975636https://download.csdn.net/download/u011283226/88975636        Github 的 https://github.com/mengps/AsterixParserhttps://github.com/mengps/AsterixParser
http://www.zqtcl.cn/news/49872/

相关文章:

  • 文学类网站怎么做详情页设计模板详情页设计素材
  • 网站中怎么做图片的变换东莞市义务教育阶段统一招生平台
  • 网站关键词之间用什么符号隔开网页制作教程用什么软件
  • 北京网站备案号查询网站建设doc
  • 贵阳市网站建设公司wordpress 去掉版权信息
  • dede网站怎么做单页面做问卷的网站生成二维码
  • 网站开发需解决什么问题chinacd.wordpress变装
  • 怎么做自己的微信网站磁力搜索引擎下载
  • 网站导航栏自适应显示网站开发的行业情况分析
  • 网络营销典型企业seo网站优化服务
  • 彩票网站搭建专业网站设计软件工具
  • 网站技术解决方案不包括wordpress子站点用户无角色
  • 沂源做网站深圳网站建设龙华信科
  • 重庆网站建站价格怎么建造自己的网站
  • 网站建设团队介绍怎么写南昌seo站外优化
  • asp.net mvc5 网站开发实践金融行业seo整站优化
  • 温州哪里有做网站的个人网站设计模板素材
  • 服务器什么建网站60个偏门暴利赚钱项目
  • 河北网站建设制作如何建设一个视频小网站
  • wordpress多网站整合在一个后台做ppt的模板网站
  • 石狮网站设计公司建行个人网上登录入口
  • 网站设计需要什么证dedecms如何做网站
  • 招聘网站建设的意义如何创建网站目录
  • 做公司网站利润网站建设类公司可以拿哪些项目资金
  • 电商网站开发模版苏州网站推广电话
  • 计算机网络网站开发wordpress 过滤get值
  • 无锡网站建设公司怎么样网站线框图用什么做
  • 网站建设 seo sem网站建设费缴税
  • 外贸自主建站平台深圳市建网站
  • 网站导航凡科怎么建设网站